关于C语言程序中指针的一道选择题

有一下程序point(char*p){p+=3;}main(){charb[4]={‘a',‘b',‘c',‘d’},*p=b;point();printf(“%c\n”... 有一下程序
point(char *p){p+=3;}
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point();
printf(“%c\n”,*p);
程序运行结果是:?

希望能得到比较详细的解释过程,本人对指针不是很懂,谢谢了,分不多,都给了。
最后漏了一个 },不好意思! 答案是 a 我就是不知道为什么,有高手给我解释下吗?
展开
 我来答
yfuy23
2010-03-19
知道答主
回答量:8
采纳率:0%
帮助的人:16.8万
展开全部
首先怀疑你的程序有笔误,估计你把point( p ) 写成了 point()了
这样的话,你的题目就变成这样了.

----------------------------------------------------------------------
point(char *p){p+=3;}
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point( p );
printf(“%c\n”,*p);
程序运行结果是:?
----------------------------------------------------------------------
先简单说明一下指针:指针就是变量的地址。如char *p;这个p就是一个指针(地址)。*p就是这个地址里放的变量(字符)

这个问题的关键在point(char *p){p+=3;}这个函数,其中(char *p)的p为形参(就是形式的参数)。可以把这个函数改为point(char *tmp_p){tmp_p+=3;}结果是一样的,但是更容易理解了。
在main函数中,p=b。而b是一个数组名,b也是{‘a',‘b',‘c',‘d’}这个数组的首地址。这个首地址里放的字符就是‘a’,所以*p就是‘a’。调用point( p );后p的值没有任何变化,所以说*p是‘a’;为什么说调用point( p );后,p没有任何变化呢?
前面把point(char *p){p+=3;}改为point(char *tmp_p){tmp_p+=3;}了。
其实调用point(tmp_p);的过程是这样的:
tmp_p = p;
tmp= tmp+3;
这样可以看出变化的是tmp, p没有任何变化。所以p这个地址没有变,所以p这个地址(也就是说数组b的首地址)里放的还是‘a’。

另外,tmp_p这个变量的生存周期就是point( p )函数的执行周期。关键要明白main函数中的p和point(char *p){p+=3;}中的p不是一个指针(变量),是两个指针(变量)。在调用point( p )函数的时候把main中的p赋值给了point(char *p)中的p。
匿名用户
2010-03-19
展开全部
point(char *p){p+=3;}
为p指针向下顺移寻址三位

char b[4]={‘a',‘b',‘c',‘d’},*p=b;
此时(*p)的指针值为b[0]指向b数组头位置,即当前内存状态(*p)='a',p=b;
point();应该把参数加进去,应该是pint(p);得到结果是
p+=3,即&b[0+3]=&b[3];所以当前(*p)=b[3]='d'

所以最终运行结果*p为 'd'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
reynoon
2010-03-19
知道答主
回答量:16
采纳率:0%
帮助的人:0
展开全部
point();!!!
确定这条语句对吗!!!???应该编译不过吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南蛮王
2010-03-19 · TA获得超过178个赞
知道答主
回答量:129
采纳率:0%
帮助的人:57.6万
展开全部
明显是d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式