初探C的结构体

上来先说点别的

编译过程:

(.c文件)-预处理(.i文件)-编译(.s文件)-汇编(.o文件)-链接(可执行文件)


预处理:

1.展开头文件

2.宏定义   宏替换只是替换,不会运算

 

宏不考虑c的语法,只是单纯的字符串替换

宏相对于调用函数来说,可以不考虑返回值的类型,因为宏可以不考虑c的语法


定义方法:

#define R 10      //不用分号 或者:   #define ADD(a,b) a+b

 

typedef: //给变量起别名,加分号结尾,预处理后不替换

typedef int tni;//给变量类型int起一个别名tni,要用分号结尾

typedef int*p;  //给int *起别名p;int *q =NULL;相当于 p q=NULL;

 

结构体:创建(声明) 定义 初始化 引用

struct xinx  //创建结构体类型struct xinx

{

    char name[20];

    int sanwei;

};

struct xinx aver;    //定义一个变量cangls(这种是声明与定义分离形式)

struct xinx aver={“cangls”,90 };//结构图初始化

printf(“%s\n %d\n”,aver.name , aver.sanwei);  //引用结构体  . 是最高优先符

struct xinx *w;      //定义指向结构体的指针

w=&xinx;          //初始化指针

printf(“%s\n”,(*w).name);    //引用  (*w)括号不能省,因为 . 比*优先

//可以使用”w->name”代替(*w).name

结构体指针:

1 stu.成员名(stu.name)

2(*p).成员名(  (*p).name  )

3p->成员名(p->name)


 

 

共用体:

结构体占用空间的大小,其实是:最后一个变量的偏移量(某一个成员的实际地址与这个结构体首地址的距离)(还有偏移量必须是这个变量所占用内存的整数倍,如果不是编译器就会在成员之间加上前充字节),加上最后一个变量的内存大小,如果前两个加起来不能整除最宽的变量,那么还要加上最后一个变量的尾部填充字节数。所有成员共享一个内存地址


1.联合体 union的作用:让几个不同类型的变量共享同一个内存地址,同一时刻只能存储

 一个成员;初始化时只能有一个常量;内存长度取最长值;

2.结构体内存大小:以最后一个成员的偏移量+自身大小+字节填充

(电脑会自行填充至成员大小整数倍)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值