标签:
实际问题中的数据中往往有着不同类型的数据类型,例如在校的学生,年龄(int型)、身高(float型)、体重(float型)、姓名(字符串类型)、性别(char)等等这些都是每一个学生应有的属性,我们肯定不能用之前学过的数据类型将这些数据表达出来,结构体这种新的数据类型就应运而生,不管是C语言还是OC语言都有它的用武之地。
1 struct 结构体名{ 2 类型1 成员名1 3 类型2 成员名2 4 ... ... 5 } 6
其中struct为关键字,是结构体类型的标志,结构体名一般首字母大写
比如定义一个学生的结构体:(注意大括号和末尾的分号)
1 struct Student{ 2 int age; 3 float weight; 4 char *name; 5 };
1 int a;
(沿用上面的结构体)
struct Student stu;
其中stu为结构体变量名,struct Student表明stu变量为学生类型的结构体,结构体类型的定义和结构体变量的定义我们可以一步完成:
1 struct Student{ 2 int age; 3 float weight; 4 char *name; 5 }stu;
我们也可以定义多个结构体变量:
1 struct Student{ 2 int age; 3 float weight; 4 char *name; 5 }stu1, stu2, stu3;
这里的stu1、stu2、stu3都是Student类型的结构体变量
1 //错误代码 2 struct Student{ 3 int age; 4 float weight; 5 char *name; 6 }stu1; 7 8 stu1 = {16,58.4,"ZhangSan"};
这是初学者容易犯的错误,那么对于结构体变量的整体初始化只能是下列四种方式之一:
1 //第一种方式 2 struct Student{ 3 int age; 4 float weight; 5 char *name; 6 }stu1= {16,58.4,"ZhangSan"}; 7 8 //第二种方式 9 struct Student{ 10 int age; 11 float weight; 12 char *name; 13 }; 14 15 struct Student stu1 = {16,58.4,"ZhangSan"}; 16 17 //第三种方式 18 struct Student{ 19 int age; 20 float weight; 21 char *name; 22 }stu1 = {.weight = 58.4,.age = 16,.name = "ZhangSan"}; 23 24 //第四种方式 25 struct Student{ 26 int age; 27 float weight; 28 char *name; 29 }; 30 31 struct Student stu1 = {.weight = 58.4,.age = 16,.name = "ZhangSan"};
第一种和第二种方式要注意每个数据的先后顺序,要一一对应起来,至于第三种和第四种方式用到了访问结构体成员变量的点(‘.‘)方法,这两种方法对成语变量的赋值是可以不按顺序来
1 #include<stdio.h> 2 3 int main(){ 4 5 //定义一个结构体类型 6 struct Student{ 7 int age; 8 float weight; 9 char *name; 10 }; 11 //定义一个结构体变量并初始化 12 struct Student stu1 = {16,58.4,"ZhangSan"}; 13 //修改成员变量的值 14 stu1.age = 14; 15 //输出修改后的值 16 printf("%d\n", stu1.age); 17 return 0; 18 }
1 #include<stdio.h> 2 3 int main(){ 4 5 //定义一个结构体类型 6 struct Student{ 7 int age; 8 float weight; 9 char *name; 10 }; 11 //定义一个结构体数组并初始化 12 struct Student stu[3] = {{16,58.4,"ZhangSan"}, 13 {15,54.3,"LiSi"}, 14 {17,55.0,"LiMing"}}; 15 //输出每个结构体数组中age的成员变量值 16 printf("%d---%d---%d\n", stu[0].age,stu[1].age,stu[2].age); 17 return 0; 18 }
结构体变量指针的定义:
1 struct Student{ 2 int age; 3 float weight; 4 char *name; 5 }*p_stu;
也可以是这样
1 struct Student{ 2 int age; 3 float weight; 4 char *name; 5 }; 6 7 struct Student *p_stu;
那么指针式如何访问成员变量的呢?有两种方式
代码实现:
1 #include<stdio.h> 2 3 int main(){ 4 5 //定义一个结构体类型此时内存还没有分配空间给结构体 6 struct Student{ 7 int age; 8 float weight; 9 char *name; 10 }; 11 //定义一个结构体指针,此时系统会分配相应大小的空间给指针变量 12 struct Student *p_stu; 13 14 p_stu->age = 10; 15 p_stu->name = "ZhangSan"; 16 17 printf("%d---%s\n", p_stu->age,(*p_stu).name); 18 return 0; 19 }
标签:
原文地址:http://www.cnblogs.com/oucding/p/4403422.html