近日朋友准备一c++的面试,看到一段程序问我,程序如下
#include
void f(int *x){x=x+1;}
int main(void){
int a[]={1,2},*pa=a;
f(pa);
printf("%d",*pa);
return 0;
}
那个打印值是1还是2,我的回答很信誓旦旦,2 。他和我有一样的分析,指针被加1,所以是2。
但是我把这段程序执行后 发现打印的结果是 1。
于是他想到了x是传值方式而不是传地址。
然后把程序改造了一下,
void f(int **x){*x=*x+1;}
int main(void){
int a[]={1,2},*pa=a;
f(&pa);
printf("%d",*pa);
return 0;
}
此时打印出来就是2。
开始的程序确实很具有迷惑性,*x 咋一看就以为是传地址了。但是确不然。小心小心。
阅读(761) | 评论(0) | 转发(0) |