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
}