#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
的末尾字节之后了。