一. 结构体
-
结构体的概念 -> 新类型
定义一个整型变量: int A;
定义多个整型变量: int A[100]; --> 数组解决同时定义多个相同类型的变量同时定义多个不同类型变量时? 如何解决? --> 结构体 --> 内部存储不同类型的基本数据类型
结构体: 同时有char short int long float double int* char* int()[3] int ()(int,int),数组,结构体,联合体 --> 不能有函数
—> 结构体: 就是由多个不同变量组成的复杂的新的数据类型。
- 结构体这种新类型是如何定义的呢?
模型:
struct 结构体名字{
/* 结构体的组成变量 */
}; --> 后面有一个分号,不然就会报错!
编译出错: error: expected ‘;’, identifier or ‘(’ before ‘int’
例子:
struct mydata{ struct mydata --> 新的数据类型 好像我们的int一样。
char name[20];
int age;
};
-
结构体变量如何定义?
struct mydata --> 新的数据类型
定义变量公式: 数据类型 变量名;
定义整型变量 int a;定义结构体变量: struct mydata b;
-
结构体指针如何定义?
定义结构体变量: struct mydata b;
1)先写一个 *
2)在*后面写一个指针变量名p p
3)确定指向数据是什么 struct mydata b;
4)把指向的数据的变量名去掉 struct mydata
5)把剩余的部分加在p前面 struct mydata *p;结果: 结构体指针: struct mydata *p;
数据类型: struct mydata *
变量名: p -
结构体变量与指针是如何访问成员?
1)设计结构体的成员
struct mydata{
char name[20];
int age;
};
2)结构体的变量是使用 “.” 访问结构体的成员
struct mydata gec;
strcpy(gec.name,“helloworld”);
gec.age = 100;
printf(“gec.name = %s\n”,gec.name); //helloworld
printf(“gec.age = %d\n”,gec.age);//100
3)结构体的指针是使用 “->” 访问结构体的成员
strcpy(p->name,“apple”);
p->age = 20;
printf(“p->name = %s\n”,p->name);//hello
printf(“p->age = %d\n”,p->age);//20
-
结构体变量赋值方式
- 先定义一个变量,再使用"."访问成员进行赋值
struct mydata gec;
strcpy(gec.name,“helloworld”);
gec.age = 100;
2. 在定义的同时进行初始化
struct mydata aaa = {“helloworld”,10}; --> 等价于 “helloworld” 拷贝对应成员name的空间 10 -> age的空间中
–> 注意对应的位置与类型必须与结构体定义时变量类型一致
struct mydata bbb = {“hello”}; --> 后面没有赋值的变量都为0 指针都为NULL
3. 使用另外一个结构体变量给某个结构体变量整体赋值