84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
#define SIZE 100; const int size = 100;
他们有什么区别
char b[4] ; char (*pb)[4] = &b;//正常
b 是一个指针常量 ,也可以说是一个整形常量,可不可以理解是第二种情况,可以取地址,但不能赋值
b在内存中,有没有自己的空间
认证0级讲师
define宏是在预处理阶段展开,const是在编译运行时
define不带类型也不做安全检查,const带类型,在编译阶段会执行安全检查
define占用代码空间;const是变量定义,占用数据段空间,效率更高
define 宏定义只是在编译器的预处理(Preprocessing)阶段进行单纯的文本替换,也就是正式开始编译时,你代码里SIZE都会被替换成100。编译报错或者运行时如果出了问题,你只能知道是100出了问题,SIZE对你来说是不可见的,这样不利于Debug。而使用常量就不会有这样的问题。
你下面的代码,看着虽然别扭,但是没问题。b是一个栈上分配的变量,自然占用了内存空间。
@胡须老头 貌似没有分配调试信息:栈上没给b分配空间,赋值使用lea栈开辟16个字节,数组占8个,pa占4个,还有4个未使用
C语言学得不是很好,错了烦请指正^_^
b是一个4B的数组;pb是一个数组指针,指向b的内存空间,所以可以通过读取pb的内容得到b的地址,但是pb+1就指到了b的末尾字节之后了。
b
4B
pb
pb+1
define宏是在预处理阶段展开,const是在编译运行时
define不带类型也不做安全检查,const带类型,在编译阶段会执行安全检查
define占用代码空间;const是变量定义,占用数据段空间,效率更高
define 宏定义只是在编译器的预处理(Preprocessing)阶段进行单纯的文本替换,也就是正式开始编译时,你代码里SIZE都会被替换成100。编译报错或者运行时如果出了问题,你只能知道是100出了问题,SIZE对你来说是不可见的,这样不利于Debug。而使用常量就不会有这样的问题。
你下面的代码,看着虽然别扭,但是没问题。b是一个栈上分配的变量,自然占用了内存空间。
@胡须老头 貌似没有分配
调试信息:
栈上没给b分配空间,赋值使用lea
栈开辟16个字节,数组占8个,pa占4个,还有4个未使用
C语言学得不是很好,错了烦请指正^_^
b
是一个4B
的数组;pb
是一个数组指针,指向b
的内存空间,所以可以通过读取pb
的内容得到b
的地址,但是pb+1
就指到了b
的末尾字节之后了。