c 函数及指针学习 7
1。结构的存储分配
|
1
2
|
printf("%d \n",sizeof(char));printf("%d \n",sizeof(int)); |

int 类型为4B char 为1B
|
1
2
3
4
5
6
7
|
struct sa { char a; int b; char c; }; |


|
1
2
3
4
5
6
7
8
|
struct sa { char c; char b; int a; };struct sa ssa; |

|
1
|
printf("%d \n",offsetof(struct sa,a)); |

结构体存储时要注意
要满足字对齐,起始地址为四的倍数,结束为止为4 的倍数。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
struct sa { char a; char b; double e; int d; };struct sa ssa;printf("%d \n",offsetof(struct sa,a));printf("%d \n",offsetof(struct sa,b));printf("%d \n",offsetof(struct sa,e));printf("%d \n",offsetof(struct sa,d)); |

2.结构体作函数的参数
部分值传递
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <stdio.h>#include <stdlib.h>#include <stddef.h>struct sa { char a; char b; double e; int d; };char saf(struct sa ssa){ return ssa.a+ssa.b;}int main(){char ra;struct sa ssa={1,2,1.1,4};ra=saf(ssa);printf("%d \n",ra);} |
引用
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <stdio.h>#include <stdlib.h>#include <stddef.h>struct sa { char a; char b; double e; int d; };void saf(struct sa *ssa){ssa->a=ssa->a+ssa->b;}int main(){struct sa saa={1,2,1.1,4},*ssa;ssa=&saa;saf(ssa);printf("%d \n",ssa->a);} |
3位段
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include <stdio.h>#include <stdlib.h>#include <stddef.h>struct sa { unsigned a :1; unsigned b :2; signed e :2; signed d :2; };int main(){struct sa saa={1,2,3,4},*ssa;printf("%d \n",sizeof(struct sa));printf("%d \n",saa.d);} |
d占2Bit,给d赋值 4溢出 ,为00,有符号数 结果为0,
给d 赋值 3 溢出,为11,有符号数,结果为-1;
位段的功能均可由移位和屏蔽实现。
c 函数及指针学习 7的更多相关文章
- C函数及指针学习1
1 大段程序注释的方法 #if 0#endif 2三字母词 以两个问号 开始的都要注意 3 字面值(常量) 在整型号字面值后加 字符L (long),U(unsigned)说明字符常量 为长整型 或( ...
- c 函数及指针学习 10
标准库函数 1算数运算stdlib.h 2随机数stdlib.h 3字符串转化stdlib.h 4数学函数 math.h 5日期和时间 time.h 6信号 signal.h 7打印可变参数列表std ...
- c 函数及指针学习 9
指针的高级应用 处理命令行参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main(int ar ...
- c 函数及指针学习 5
聚合数据类型 能够同时存储超过一个的单独数据. c语言提供了数组和结构体. 1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> # ...
- c 函数及指针学习 4
1数组和指针声明的差别 声明数组:为数组分配内存,为数组名分配内存(指针常量 4个字节) 指针:为指针分配内存(指针变量 4个字节) 1 2 3 4 5 6 7 8 9 10 #include < ...
- c 函数及指针学习 3
strlen(x) 返回 size_t 类型,size_t是 unsigned int 类型,所以 strlen(x)-strlen(y) 返回 unsigned int 始终 >=0 1 2 ...
- C函数及指针学习2
1.break 永久终止循环,continue 结束当前循环 2.switch 每个case标签要有唯一值,(且为常量或常量表达式) 不加break 时执行流会贯穿整个case 标签 3 赋值操作符 ...
- c 函数及指针学习 8
联合体 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> union sa { double a; int b; ...
- c 函数及指针学习 6
不完整声明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* 方法一 */ struct tag_a{ ...
随机推荐
- Echarts 地图控件tooltip多行显示
直接上代码 var o = { "tooltip": { trigger: 'item', "formatter": function (params) { v ...
- 创建一个ROS msg
1. msg •msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项).用于为不同的编程语言生成有关消息的源代码. •srv:描述服务的文件,由两部分组成:请求和反馈: msg文 ...
- 安装arbotix simulator仿真环境()
先安装rbx1功能包: cd ~/catkin_ws/src git clone https://github.com/pirobot/rbx1.git cd rbx1 git checkout in ...
- 2.4.2电子书fb.c文件
显示层面头文件 定义结构体,为显示统一标准 int (*DeviceInit)(void); 显示类驱动初始化 int (*ShowPixel)(int iPenX, int iPenY, unsig ...
- CodeIgniter 引入自定义公共函数
CodeIgniter 中公共函数不能追加,可以通过 helper 辅助函数实现. 创建 common_helper.php 文件,定义所需公共函数,存放至 application/helpers 目 ...
- 兼容 IE,firfox 的时间日期出现 NaN
//当前日期加上天数后的新日期.function AddDays(days) { var d = new Date(); var year = d.getFullYear(); var day = ...
- 银行支票和汇票中使用的专用字体MICR E13B条形码控件字体
MICR E13B条形码控件字体是一种在美国.加拿大.波多黎各.巴拿马.英国和其它少数国家的银行支票和汇票中使用的专用字体,主要用来打印适用于磁性和光学字符识别系统的MICR字符.MICR E13B条 ...
- Power Point已经检测到你的显卡可能无法正确配置
Microsoft PowerPoint打开ppt时提示信息 PowerPoint已检测到你的显卡可能无法正确配置最佳的幻灯片播放体验(“Power Point has detected that y ...
- android studio只能全部提示设置
- UIViewController
UIViewController 在MVC模式中就是C.关于MVC,可以看 UIViewController 主要具有什么功能呢? View Management When you define a ...