黑马程序员————C语言结构体

来源:互联网 发布:大数据300a基金001420 编辑:程序博客网 时间:2024/05/15 12:14
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1,结构体简介

    “结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它。

2,结构体定义

定义一个结构的一般形式为:

struct 结构名{成员表列};

例如:

例如:struct STU{int num;char name[20];char sex;float score;};

    在这个结构定义中,结构名为STU,该结构由4个成员组成。第一个成员为整型变量num;第二个成员为字符数组name;第三个成员为字符变量sex;第四个成员为实型变量score。应注意在括号后的分号是不可少的。
注意:
1)不允许对结构体本身递归定义;
2)结构体内可以包含别的结构体;
3)定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量;
4)结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列。

3,结构变量声明

1)先定义结构,再说明结构变量。

struct STU{int num;char name[20];char sex;float score;};struct STU stu;

2)在定义结构类型的同时说明结构变量。

struct STU{int num;char name[20];char sex;float score;} stu;

3)省略结构名直接说明结构变量。

struct{int num;char name[20];char sex;float score;} stu;

4,结构变量的初始化

将各成员的初值,按顺序地放在一对大括号{}中,并用逗号分隔,一一对应赋值。只能在定义变量的同时进行初始化赋值,初始化赋值和变量的定义不能分开。

struct STU{int num;char name[20];char sex;float score;};struct STU stu = {100,“Jack”,’M‘,86.5};

5,结构体的使用

一般对结构体变量的操作是以成员为单位进行的,引用的一般形式为:结构体变量名.成员名
例如:

struct STU{int num;char name[20];char sex;float score;} stu;stu.num = 101;

6,结构体数组

数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。
例如:

struct STU{int num;char name[20];char sex;float score;} stu[5];

7,结构变量作为函数参数

    将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。

例如:

#include <stdio.h>struct STU{int num;char name[20];char sex;float score;};void xiugaifenshu(struct STU stu){printf("输入分数\n");scanf("%f",&stu.score)}int main(){struct STU  stu = {100,“Jack”,’M‘,86.5};xiugaifenshu(stu);prinf("分数为:%f",stu.score);return 0;}

8,指向结构体的指针

每个结构体变量都有自己的存储空间和地址,因此指针也可以指向结构体变量。
结构体指针变量的定义形式:

struct 结构体名称 *指针变量名

有了指向结构体的指针,那么就有3种访问结构体成员的方式:

结构体变量名.成员名(*指针变量名).成员名指针变量名->成员名

例如:

#include <stdio.h>struct STU{int num;char name[20];char sex;float score;};int main(){struct STU  stu = {100,“Jack”,’M‘,86.5};struct STU *p = &stu;stu.score = 75;(*p).score = 65;p->score = 55;return 0;}


0 0