这是我们C++书本上的一道题目,输出答案是0,10 但我不知道是怎么来的,有木有大大能告诉我啊.

我用小写写的,可能直接复制粘贴到程序上会有点错误.#include<stdio.h>main(){intx[5],i,j;voidm1(int*p);voidm2(int... 我用小写写的,可能直接复制粘贴到程序上会有点错误.
#include <stdio.h>
main()
{ int x[5],i,j;
void m1(int *p);
void m2(int,int);
for(i=0;i<5;i++) x[i]=i+1;
m1(x);
m2(x[0],x[4]);
printf("%d,%d",x[0],x[4]);
}
void m1(int *p)
{ int i;
for(i=0;i<5;i++)
*++p+=2;
}
void m2(int i,int j)
{ int a;
a=i;i=j;j=a;
}
对不起对不起!!!
我经常把i看成1了
在x[i]=i+1那里应该改成x[i]=i+i
请各位大大注意啦.
展开
 我来答
zhang_yu9999
2011-06-29
知道答主
回答量:8
采纳率:0%
帮助的人:8.4万
展开全部
执行m1函数前x={0,2,4,6,8}
m1函数中关键句*++p+=2;
入口参数x[5]数组,在执行前,p指向x[0],执行第一次时,先++p(p指向x[1]),然后*p+=2;所以m1函数执行完x={0,4,6,8,10}。(需要注意的是此函数有一个bug,最后一次循环实际上十修改的x[5]元素,使用指针方式虽然没有越界问题,但修改的地址属不可控,会有小概率产生问题)

m2函数由于入口参数是变量值,不是指针或引用形式,故没有起到交换作用,x数组值不变,所以最后输出结果为0和10.
程序员聚集地
2011-06-29 · 超过14用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:29.2万
展开全部
,,,我也是新手。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JINYUTTT
2011-06-29 · TA获得超过178个赞
知道小有建树答主
回答量:792
采纳率:0%
帮助的人:549万
展开全部
在执行m1(x);之前,x[0]=0;x[4]=8,调用m1以后x[0]后面的数变了。加了2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
946812011
2011-06-29 · 超过20用户采纳过TA的回答
知道答主
回答量:209
采纳率:0%
帮助的人:0
展开全部
m1(x);
x为0,2,4,6,8
*++p+=2;
先*++p指针指向2,2+2=4,6,8,10
m2(x[0],x[4]);
x[0]=0;,x[4】=10
在下一个函数里面交换这2个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式