这是我们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
请各位大大注意啦. 展开
#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
请各位大大注意啦. 展开
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.
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.
展开全部
,,,我也是新手。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在执行m1(x);之前,x[0]=0;x[4]=8,调用m1以后x[0]后面的数变了。加了2;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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个数
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个数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询