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{ ...
随机推荐
- 数据结构-AVL树
实现: #ifndef AVL_TREE_H #define AVL_TREE_H #include "dsexceptions.h" #include <iostream& ...
- C++-多重继承的注意点
1, 钻石型多重继承如果不想要底部的类有重复的变量,则需要声明为virtual继承 class File{...}; class InputFile: virtual public File{..}; ...
- 测试V模型
一:测试V模型 RAD(Rap Application Development 快速引用开发)模型是软件开发过程中的一个重要模型,由于模型构图形似字母V,所以又称软件开发的V模型.他通过开发和测试同时 ...
- 加强版for循环
/*加强版for循环 * 5.0以后有加强版for循环 * for(String name:nameArray){} * 1.String name:声明会带有数组单一元素的循环变量 * 数组元素 ...
- SharePoint 2010 BCS - 简单实例(一)数据源添加
博客地址 http://blog.csdn.net/foxdave 本篇基于SharePoint 2010 Foundation. 我的数据库中有一个病人信息表Patient,现在我就想把这个表中的数 ...
- ODI中的临时接口
在ODI 11g及后续的版本中,针对复杂的ETL处理,可分解为多个步骤,在中间步骤中使用临时接口,而不用建立相应的物理表,ODI会在处理过程中自动创建和删除这些中间表,从而降低ETL处理复杂度:同时, ...
- sql 之CONCAT用法
这是java交流群里一个网友面试的时候发过来的笔试题,我觉得题目的假定条件应该是某个字母对应的最小数字只有一个. 思路第一步是查出一个子表s1: select name,min(number) fro ...
- java,android获取系统当前时间
SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss ");Date curDate = ...
- About View
View Geometry Frame & Bounds Graphically, a view can be regarded as a framed canvas. The frame l ...
- WebGis应用开发框架
转自:http://www.cnblogs.com/zitsing/archive/2012/03/02/2377083.html 前言 Web Gis顾名思义就是通过浏览器方式操作的地理系统.通过浏 ...