1. const常量与宏定义常量标识符
(1) 编译器处理方式时间不同
define宏是在预处理阶段展开;
const常量是编译运行阶段使用;
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开;
const常量有具体的类型,在编译阶段会执行类型检查;
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存;
const常量会在内存中分配(可以是堆中也可以是栈中);
2. const变量
- 总结,const全局变量存储在全局存储空间,其值只有可读属性,不能修改;
- const局部变量存储在堆栈中,可通过指针修改其值;
- const变量在预处理时处理,编译器只对其值读取一次(这也是为什么内存中的值实际被修改时,编译器print的值仍为原来的值)
https://blog.csdn.net/a3125504x/article/details/78835973
4. 内存划分
内存区化为四个部分,分别保存 代码段、全局(静态)变量区、栈、堆
https://blog.csdn.net/MQ0522/article/details/114823770
3. sizeof
char ca[] = {"123456"}; char *pca = "123456"; printf("sizeof(ca)=%d,sizeof(pca)=%d,sizeof(*pca)=%d\n",sizeof(ca),sizeof(pca),sizeof(*pca)); char cb[3][6] = {"123456","123456","123456"}; char *pcb[] = {"123456","123456","123456"}; printf("sizeof(cb)=%d,sizeof(pcb)=%d,sizeof(*pcb)=%d,sizeof(**pcb)=%d\n",sizeof(cb),sizeof(pcb),sizeof(*pcb),sizeof(**pcb));
//32位
$ gcc sz.c -o sz -m32
[nereus@nereusp cpp]$ ./sz
sizeof(ca)=7,sizeof(pca)=4,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=12,sizeof(*pcb)=4,sizeof(**pcb)=1
//64位
$ gcc sz.c -o sz
$ ./sz
sizeof(ca)=7,sizeof(pca)=8,sizeof(*pca)=1
sizeof(cb)=18,sizeof(pcb)=24,sizeof(*pcb)=8,sizeof(**pcb)=1
sizeof(数组名)返回的是数组的大小
sizeof(ca)=7,注意此处包含一个结束符
sizeof(cb)=18,
sizeof(一维数组指针)返回的是数组单个元素指针的大小,即系统指针的长度,32位系统为4,64位系统位8
64位:sizeof(pca)=8,32位:sizeof(pca)=4
sizeof(*一维数组指针)返回的是数组单个元素对应类型的大小
sizeof(*pca)=1,char的大小
sizeof(二维数组指针)返回的是二维数组行指针的大小,32位系统为行数×4,64位系统位行数×8
sizeof(pcb)等同于sizeof(pcb[0])、sizeof(pcb[1])、sizeof(pcb[2])
64位:sizeof(pcb)=24,3行×8,注意二维数组每一行的结尾没有结束符'\0',所以是行长度为8
32位:sizeof(pcb)=12,3行×4,
sizeof(*二维数组指针)返回的是系统指针的长度,32位系统为4,64位系统位8
64位:sizeof(pcb)=8,32位:sizeof(pcb)=4
sizeof(**二维数组指针)返回的是数组单个元素指针的大小,即char的大小
sizeof(**pcb)=1,
https://blog.csdn.net/Namcodream521/article/details/85315955
标签:123456,const,基础,pcb,sizeof,pca,指针 From: https://www.cnblogs.com/tiange-137/p/17110349.html