typedef 重命名
面试题:typedef和define的区别?
typedef int int32;
int32 a,b;//定义两个int型变量a和b; int a,b
typedef int int_p;
int_p p,q;//定义了两个指针
#define int_p int
int_p p,q;//int *p,q;定义一个指针变量为p,q为整型变量
typedef int int_pp;
//int ( )[3] p**
typedef int (arr_p)[3];
arr_p p;
//char ( )(int,char ) fun_p
typedef char (Fun_P)(int,char );
Fun_P fun_p;
结构体 struct
概念
是一种构造数据,用于去描述一个信息或者一个对象。结构体让c语言有面向对象的思想。
C语言程序的三种基本结构体
顺序结构、选择结构、循环结构
格式
struct 结构体名
{
数据类型 成员变量1;
数据类型 成员变量2;
数据类型 成员变量3;
……
数据类型 成员变量n;
};
注:
1.通过结构体变量访问成员变量,用 . 降级访问。
2.结构体变量之间可以整体赋值,对应成员变量之间也可以相互赋值。
3.结构体成员不可以是函数,可以是—->
1)基本数据类型变量
2)指针:一级、二级、数组指针、函数指针、结构体指针
3)数组:一维、二维、指针数组、函数指针数组
4)结构体类型变量
举例:描述学生
struct student
{
int id;
char name[32];
float score;
};
定义结构体变量:
struct 结构体名 变量名;
初始化问题:
1)定义结构体变量的同时直接初始化。
struct student stu={1,”xiaoqiao”,99};
2)先定义结构体变量,再赋初值,需逐个成员分别赋初值。
struct student stu;
stu.id=2;
strcpy(stu.name,”houyi”);
stu.score=100;
3)点等法
struct student stu={
.id=1,
.name=”xiaoqiao”,
.score=99,
};
结构体变量所占空间大小计算
**1)**结构体变量所占空间大小为所有成员所占空间总和,但是有对齐方式。<br /> 以成员中最大数据类型对齐开辟内存空间。<br /> **2)**32为操作系统最大以4字节对齐,64位最大以八字节对齐。<br /> 代码举例:struct_size.c <br />
定义结构体类型:
省略结构体名的格式
struct
{
数据类型 成员变量1;
数据类型 成员变量2;
数据类型 成员变量3;
……
数据类型 成员变量n;
}变量名1,变量名2;
使用:
1)定义结构体类型的同时定义变量,只是用这一个变量。
结构体中嵌套定义结构类型,只是使用一个对应类型的变量。
2)结合typedef使用。
结构体指针
格式: struct 结构体名 *指针变量;<br /> <br /> 通过指针访问成员变量的值:<br /> **1》**取地址内容,再**.**降级访问<br /> (*指针变量)**.**成员变量 <br /> **2》**直接指针指向成员<br /> 指针变量 -> 成员变量<br /> <br /> struct student stu={1,"xiaoqiao",99};<br /> struct student *sp=&stu;<br />
结构体数组
格式: struct 结构体名 数组名[下标];<br /> <br /> **初始化:**<br /> 1.struct student stu[3]={1,"wang",99,2,"li",100,3,"zhang",89}<br /> <br /> for(i=0;i<3;i++)<br /> {<br /> printf("%d %s %f\n",stu[i].id,stu[i].name,stu[i].score);<br /> }<br /> <br /> 2.struct student stu[3];<br /> 3.struct student stu[3]={<br /> [0]={<br /> .id=1,<br /> .name="wang",<br /> .score=99,<br /> },<br /> [1]={<br /> .id=2,<br /> .name="li",<br /> .score=100,<br /> },<br /> [2]={<br /> .id=3,<br /> .name="zhang",<br /> .score=89<br /> },<br /> }<br /> <br />