读书人

关于指针的一些有关问题(2)

发布时间: 2012-04-09 13:41:25 作者: rapoo

关于指针的一些问题(2)

char *msg="an error occured\n";
char msg2[]="an error occured\n";

1:
这个2个之间有什么区别;
为什么
sizeof(msg)是4;
sizeof(msg2)是24;

2:
msg="an error occured\n";
msg=msg2;

msg2[]="an error occured\n";
msg2=msg;
为什么下面的这个是错的

[解决办法]
第一:sizeof是在时就转为常量的,比如sizeof(int)在编译时就换成了常量:4,也就是说它不是一个运行时操作。
第二:指针在32位中是占4个字节,所以sizeof任意指针都是4。
第三:理论上数组名就是指向数组的指针,但毕竟它们是不一样的,编译器在编译时查找到定义会发现变量名后面的【】,所以知道是数组,而不是指针,这时候转换sizeof时,如果是数组,就转换成全部数组所占的字节数。也就是说

C/C++ code
char a[10] = "abc\n";sizeof(a); 

读书人网 >C++

热点推荐