struct 类型名 自定义数据类型,定义完成以后,等同于内置类型
1.结构体不能定义一个包含自身的普通成员,但可以定义一个指向自身的指针
struct A { int a; char b; struct A c;//error 结构体不能定义一个自身的普通成员变量 struct A *p;//ok 结构体可以定义一个指向自己的指针 //链表 };
2. 结构体普通变量通过“.”号访问它的成员 结构体指针变量通过“->”号访问它的成员 有两个自带*(解引用)的符号“->,[ ]”
#include <stdio.h> #include <string.h> struct Student { char name[20]; int age; }; void Show(struct Student stu) { printf("%s,%d\n",stu.name,stu.age); stu.age = 0; //修改失败,因为不满足1.传指针 2.解引用 } void Show1(struct Student *pstu) { printf("%s,%d\n",pstu->name,pstu->age); pstu->age = 0; //修改成功值为0,子函数想要修改父函数的值必须满足1.传指针 2.解引用,成立 //为了避免修改,可以在struct前面加const,屏蔽pstu->age = 0 } int main() { struct Student stu1; struct Student stu2 = {"liubei",25}; struct Student stu3 = {"caocao"};//0,聚合类型只初始化一部分则剩余部分为0 stu3.age = 30; //stu3.name = "sunquan";//error //字符串不能直接赋值! strcpy(stu3.name,"sunquan"); //ok struct Student *pstu = &stu2; //int *p = &a; //(*pstu).age = 35; pstu->age = 35; strcpy(pstu->name,"zhangfei"); Show(stu2); Show(stu2); Show1(&stu2); Show1(&stu2); //值为0,子函数想要修改父函数的值必须满足1.传指针 2.解引用 return 0; }
typedef 数据类型 新数据类型
去掉typedef,查看定义的类型变量,然后加上typedef就由该类型的变量提升为该类型
typedef int Arr[10]; //定义了整型数组类型 int main() { int a[10]; //定义了整型数组变量 int b[10]; a[5] = 10; b[3] = 30; printf("%d\n",sizeof(a)); //40 printf("%d\n",sizeof(b)); //40 }
