Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485737
  • 博文数量: 78
  • 博客积分: 1771
  • 博客等级: 上尉
  • 技术积分: 944
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-25 10:20
文章分类

全部博文(78)

文章存档

2014年(2)

2013年(10)

2012年(9)

2011年(7)

2010年(11)

2009年(10)

2008年(12)

2007年(17)

我的朋友

分类: C/C++

2011-11-01 10:28:23

近日朋友准备一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 咋一看就以为是传地址了。但是确不然。小心小心。
阅读(728) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~