过客2007 - 2007-12-7 20:00:00
原题:
问题4:下面的程序执行结果是:
main()
{int x[5]={2,4,6,8,10},ppp;
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-8 11:51:00
p=x[0]; 明显错误,数组元素值怎么可以赋给指针变量呢,应该改为p=x;或p=&x[0];而且既然变量p是指针变量,那么把它赋给变量pp时不能为pp=*p; 而应该是pp=p;
过客2007 - 2007-12-8 14:24:00
| 引用: |
【风的唏嘘的贴子】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);
}
风的唏嘘 - 2007-12-8 17:39:00
不是题目不对而是你的程序不对,具体说呢是语句的执行顺序不对,把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
© 2000 - 2025 Rising Corp. Ltd.