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{ ...
随机推荐
- Winform在一个窗体获取其他窗体的值
比如:Form2获取Form1 的label的值 因为默认的窗体的所有控件属性和方法都是private, Form1 form1 = new Form1(); 这样也是获取不到的 方法一.最简单的 将 ...
- IBatis.net动态SQL语句(六)
在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&quo ...
- SQL SERVER 创建作业
),, , , , , ),SERVERPROPERTY(N, , , ...
- Mongoose 是什么?
Mongoose 参考手册 标签(空格分隔): MongoDB 一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口. Schema 一 ...
- jstl c:choose>、<c:when>和<c:otherwise>标签
<c:choose>.<c:when>和<c:otherwise>在一起连用,可以实现Java语言中的if-else语句的功能.例如以下代码根据username请求 ...
- 解决uploadify多图片上传部分图片丢失,且不提示任何错误的问题
这两天用到uploadify的flash版本进行批量图片上传并生成缩略图的功能,之前用uploadify用的好好的,这次突然出现了一个奇怪的问题. 问题描述如下:当我选择单个图片上传的时候,图片上传都 ...
- static inline
今天看到了这样一段代码, static inline BOOL IsEmpty(id thing) { return thing == nil || [thing isEqual:[NSNull nu ...
- SplashTop Remote + 4核android平板 试用
局域网默认情况 最大100Mb 的网速下, 延迟在500ms+, 观看视频无影响, 但游戏无法进行! 另一种方案,利用多网卡来提升网络传输性能!
- python几大排序算法
1.插入排序 原理:有数列[k1,k2,k3...],假设k1是排好序的,插入k2,排序完成,然后再插入k3,以此类推 def insert_sort(arr): for i in range(1,l ...
- MongoDB error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js(转)
rror: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js 一般这种情况就是:自己指定的数据库,所以不能.自动加 ...