C语言数组问题,求解!!!

voidfun(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main... void fun(int a[],int n) {
int i,t;for(i=0;i<n/2;i++)
{
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{ int k[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++)
printf("%d",k[i]);
printf("\n");
}

刚学数组,有点看不懂,谁能详细解释下这道题,谢谢!!!
展开
 我来答
车天曼聂亦
2019-09-22 · TA获得超过3.1万个赞
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:732万
展开全部
这个不一定是10,在不同的机器上,即便是在同一台机器上不同时候的值是不一样的。
分析你的代码,执行完循环后i=10,而digit[10]是不存在的,因为你的数组长度是10,下标只能是0~9,即出现了数组下标越界,而c是不检查下标是否越界的,因此不同时候内存使用不同输出的值也不同。
忻丹彤雀恬
2019-11-27 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:624万
展开全部
应该这样写:
for(...)
{
...=0;
printf...;
}
循环体超出一句就要用大括号括住。
您原先那样写是错误的:循环将整个数组赋值0后,i执行自增操作后就为10了,那么*(digit
+
10)就会发生下标越界的错误(访问内存页权限异常),输出的10是随机值(好的情况下)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
带你看真实的世界
2013-07-29 · 最好和最可怕的世界正在来临。
带你看真实的世界
采纳数:148 获赞数:942

向TA提问 私信TA
展开全部
这个函数的功能是利用一个循环变量从数组首元素开始,往上自加,a[i]和啊a[n-1-i]就是数组对应的首尾元素,然后交换内容,实现数组的逆序。谢谢采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
outlook5320
2013-07-29 · TA获得超过881个赞
知道小有建树答主
回答量:2336
采纳率:0%
帮助的人:793万
展开全部
void fun(int a[],int n) { //注意参数是数组的首地址,操作会影响主函数的内容
int i,t;for(i=0;i<n/2;i++)// i=2
{
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}// a0 a4.a1 a3.a2 a2相互对调数值
}
main()
{ int k[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5); // k=5 4 3 2 1 6 7 8 9 10。。 fun(k,x)是函数引用,这个函数有两个参数,int a[],n

int a[]就是数组a的第一个地址。
for(i=2;i<8;i++)
printf("%d",k[i]);
printf("\n");
}
追问
// k=5 4 3 2 1 6 7 8 9 10
是经过了t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}// 才变过来的吗
追答
我们对fun函数分析:n=5,i=2:执行3次循环,
每次循环执行一次对调数值:t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;

执行完就是:k=5 4 3 2 1 6 7 8 9 10
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
步越卫桂
2019-07-11 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:882万
展开全部
每次运行后输出的数不确定吧,因为执行完后i=10,digit[10]没有被赋值,所以它的值是随机的,不确定的。
for(i
=
0;
i<10;
i++)
digit[i]
=
0;这个功能是把数组都赋为0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式