目录
数组里存放的是相同元素的集合,而结构体存放的可以是不同元素的集合。
例如描述一个学生:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢
struct--定义结构体
Stu--结构体标签(方便了解结构体成员类型,在这里就是学生的相关信息)
struct Stu:结构体类型
(使用:类型+变量名(类似于int a,char b))
struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
//创建的时候定义变量
}s1,s2,s3;
//直接使用
s1={…………};
s2={…………};
struct Stu s = { "张三",18,"男","123456" };//成员之间用 , 隔开
printf("%s %d %s %s", s.name, s.age, s.sex, s.id);
struct Stu s = { "张三",18,"男","123456" };
//创建结构体指针
struct Stu* p = &s;
printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);
//错误用法
struct S
{
int data;
struct S next;
};
struct S
{
int data;
//指针
struct S* next;
};
结构体传参可以传值,也可以传地址。
void Print(struct Stu s)
{
printf("%s %d %s %s", s.name, s.age, s.sex, s.id);
}
int main()
{
struct Stu s = { "张三",18,"男","123456" };
//传值
Print(s);
void Print(const struct Stu* p)//const 修饰*p,*p的值不可以改变,Print函数只负责打印
{
printf("%s %d %s %s\n", p->name, p->age, p->sex, p->id);
}
int main()
{
struct Stu s = { "张三",18,"男","123456" };
//传地址
Print(&s);
不过总的来说,还是建议传地址,因为地址大小是固定的4/8字节(32位平台/64位平台),而且通过地址我们可以在函数内部改变结构体成员变量的值,权限更多一些。
。