码迷,mamicode.com
首页 > 编程语言 > 详细

C语言结构体

时间:2015-04-08 21:14:20      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

实际问题中的数据中往往有着不同类型的数据类型,例如在校的学生,年龄(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     };
  • 结构体类型定义完,要想使用结构体还要定义结构体变量,有些人就被这几个概念搞晕了,其实很好理解的,结构体的定义好比说明int型的数据具有哪些特点,而结构体变量的定义就类似以下语句:
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. (*指针变量名).成员名
  2. 指针变量名->成员名

代码实现:

 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 }

 

  • 结构体的使用注意

 

C语言结构体

标签:

原文地址:http://www.cnblogs.com/oucding/p/4403422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!