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");
}
刚学数组,有点看不懂,谁能详细解释下这道题,谢谢!!! 展开
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");
}
刚学数组,有点看不懂,谁能详细解释下这道题,谢谢!!! 展开
9个回答
展开全部
应该这样写:
for(...)
{
...=0;
printf...;
}
循环体超出一句就要用大括号括住。
您原先那样写是错误的:循环将整个数组赋值0后,i执行自增操作后就为10了,那么*(digit
+
10)就会发生下标越界的错误(访问内存页权限异常),输出的10是随机值(好的情况下)。
for(...)
{
...=0;
printf...;
}
循环体超出一句就要用大括号括住。
您原先那样写是错误的:循环将整个数组赋值0后,i执行自增操作后就为10了,那么*(digit
+
10)就会发生下标越界的错误(访问内存页权限异常),输出的10是随机值(好的情况下)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个函数的功能是利用一个循环变量从数组首元素开始,往上自加,a[i]和啊a[n-1-i]就是数组对应的首尾元素,然后交换内容,实现数组的逆序。谢谢采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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");
}
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每次运行后输出的数不确定吧,因为执行完后i=10,digit[10]没有被赋值,所以它的值是随机的,不确定的。
for(i
=
0;
i<10;
i++)
digit[i]
=
0;这个功能是把数组都赋为0
for(i
=
0;
i<10;
i++)
digit[i]
=
0;这个功能是把数组都赋为0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询