C 语言之结构体
一. 结构体定义
结构体类型的定义需要用到关键字struct,student是结构体类型名,大括号中的变量声明表示结构体成员,意思是该结构体将来可以存储何种类型的数据.
struct student {
char name[100];
int age;
char sex;
};
在定义结构体类型时使用匿名结构体同时使用typedef对匿名结构体做类型定义
typedef struct {
float x;
float y;
} point;
定义时,可直接调用point类型声明变量
二. 结构体赋初值
point p = {20.1,30.1};
其中初始值的个数与类型必须跟结构体类型成员列表的类型和个数一致.结构体是一个构造类型,如果访问结构体变量的数据时,需要通过点语法连接对应结构体变量名和成员去访问,例如p.x表示p结构体的x值.
math.h头文件下的函数
1. pow(a,x) 计算a的x次方的函数
2. sqrt(a) 计算根号a的值
3. abs(a) 计算a的绝对值 整型用abs() 浮点型用 fabs()
结构体中如果成员有字符串时,可以使用字符数组,也可以使用字符指针,但是在对该成员重新赋值时有所区别,字符数组描述时重新赋值需要使用strcpy函数进行拷贝,字符指针描述时只需要直接赋值完成指针的重指向.
利用结构体可以直接赋值的操作,可以简化代码量,进行对数组直接赋值的操作,不用借助for循环.
三. 嵌套结构体
在结构体声明后,后结构体中的成员可以用声明过的结构体声明的变量.
为结构体的嵌套
四. 结构体所占内存计算
为其成员的最大数据类型的最小整数划分
例如:
typedef struct {
char a;//8
char b;
int c;
long d;//8
char e[20];//24
float f;
} Test;
该计算机为64位操作系统
即先找出最大类型所占的字节数,即为long型8位,首先分配8个字节,存取a,b,由于c的类型为int型,剩下6个字节的后4个正好存储,d为long再进行分配8个字节,e为char类型的数组,长度为20,但结构体分配内存存在内存对其规定,则需要24个字节,f为float类型,正好e数组剩余4个字节补进.
五. 结构体数组
与整型数组类似,即为一组相同结构体类型的元素的有序序列.
int a[10] = {0};
point p[10] = {0};
point为上述定义的结构体,即表示为一组具有point类型的元素的数组,元素个数为10.
六. 利用结构体直接给数组直接赋值
typedef struct {
int a[3];
}Array;
Array array = {{1,2,3}};
Array copyArray = array;
通过结构体的性质,结构体的对象可以进行直接赋值操作,即可以进行对数组的直接赋值操作.