星期四, 九月 04, 2003

指针/数组?

看看下面这段代码:

#include < string.h>

#include < stdio.h>



void main()

{

char *buf="hello";

printf("%d", strlen(*((char **)&buf)));

}


没有问题,在VC6下运行显示5。
再看这段代码:

#include < string.h>

#include < stdio.h>

void main()

{

char buf[]="hello";

printf("%d", strlen(*((char **)&buf)));

}


在VC6下会导致访问异常退出,两段代码的区别是:前一段代码使用了指针,后面这段使用了数组,为什么会这样呢?原因在于这个&运算符,如果是对指针取&, 取得的是指针的指针,没有问题,然而如果对数组取&,取得的是什么呢?实际上还是这个数组的首地址,这就是后面这段程序非法访问的原因。
这是我实际编程时遇到的问题,当时我是查了很久才发现的原因,不过不明白这样的代码为什么编译时没有任何告警(即使打开4级告警)