Heim > Fragen und Antworten > Hauptteil
#define SIZE 100;
const int size = 100;
他们有什么区别
char b[4] ;
char (*pb)[4] = &b;//正常
b 是一个指针常量 ,也可以说是一个整形常量,可不可以理解是第二种情况,可以取地址,但不能赋值
b在内存中,有没有自己的空间
巴扎黑2017-04-17 13:56:08
define宏是在预处理阶段展开,const是在编译运行时
define不带类型也不做安全检查,const带类型,在编译阶段会执行安全检查
define占用代码空间;const是变量定义,占用数据段空间,效率更高
PHP中文网2017-04-17 13:56:08
define 宏定义只是在编译器的预处理(Preprocessing)阶段进行单纯的文本替换,也就是正式开始编译时,你代码里SIZE都会被替换成100。编译报错或者运行时如果出了问题,你只能知道是100出了问题,SIZE对你来说是不可见的,这样不利于Debug。而使用常量就不会有这样的问题。
你下面的代码,看着虽然别扭,但是没问题。b是一个栈上分配的变量,自然占用了内存空间。
ringa_lee2017-04-17 13:56:08
C语言学得不是很好,错了烦请指正^_^
char b[4] ;
char (*pb)[4] = &b;//正常
b
是一个4B
的数组;pb
是一个数组指针,指向b
的内存空间,所以可以通过读取pb
的内容得到b
的地址,但是pb+1
就指到了b
的末尾字节之后了。