瑞星卡卡安全论坛技术交流区系统软件 【讨论】C语言指针传递指针问题

1   1  /  1  页   跳转

【讨论】C语言指针传递指针问题

【讨论】C语言指针传递指针问题

原题:

问题4:下面的程序执行结果是:

  main()

  {int x[5]={2,4,6,8,10},ppp;

  p=x;

  pp=&&p;

  printf(“%d”,(p++));

  printf(“%d\n”,pp);

  }

  (A)4 4 (B)2 4

  (C)2 2 (D)4 6

  分析:在此题中p++是后加方式,先输出p的值,p再自加,pp是二级指针,指向一级指针p,执行第一条输出语句前后,

  所以本题应选b




所以本题应选b


修改后:

#include "stdio.h"
main()
{
    int x[5]={2,4,6,8,10},*p,*pp;
    p=x[0];   
    pp=*p;   
    printf("%d\n",(p++));
    printf("%d\n",pp);
}

网上很多人说这道题是错误的,但是从选择的答案中,可以看到是考:

指针传递指针这理论的。


该怎么修改才能达到“指针传递指针”的目的?


[用户系统信息]Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
最后编辑2007-12-08 17:28:21
分享到:
gototop
 

p=x[0]; 明显错误,数组元素值怎么可以赋给指针变量呢,应该改为p=x;或p=&x[0];而且既然变量p是指针变量,那么把它赋给变量pp时不能为pp=*p; 而应该是pp=p;

gototop
 

引用:
【风的唏嘘的贴子】p=x[0]; 明显错误,数组元素值怎么可以赋给指针变量呢,应该改为p=x;或p=&x[0];而且既然变量p是指针变量,那么把它赋给变量pp时不能为pp=*p; 而应该是pp=p;


………………


先谢谢啦,又学到了&x[0].

不过,这结果怎么算也算不到  答案B 2  4

是这道题错误吗?

修改后:
#include "stdio.h"
main()
{
int x[5]={2,4,6,8,10},*p,*pp;
p=x;
pp=p;
printf("%d\n",*(p++));
printf("%d\n",*pp);
}

gototop
 

不是题目不对而是你的程序不对,具体说呢是语句的执行顺序不对,把pp=p; 这一句放到两个printf之间就行了,也就是下面的程序
#include "stdio.h"
main()
{
int x[5]={2,4,6,8,10},*p,*pp;
p=x;
printf("%d\n",*(p++));
pp=p;
printf("%d\n",*pp);
}

原因就在于你的程序先执行了pp=p; 后面的printf()输出函数中虽然有p++把指针移到下一个数组元素,但是并没有再次赋给变量pp因此得到的结果仍然是2
gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT