c语言一道题

来源:百度知道 编辑:UC知道 时间:2024/05/29 13:55:32
#include <stdio.h>
void f(int *q)
{
int i=0;
for(;i<5;i++)(*q)++;
}
main()
{
int a[5]={1,2,3,4,5},i;
f(a);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}
为什么结果是6,2,3,4,5,
详细解释一下

void f(int *q)
{
int i=0;
for(;i<5;i++)(*q)++;
}
该函数的功能是把q指针指向的内容执行五次++操作,即+5

{
int a[5]={1,2,3,4,5},i;
f(a);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}
main函数调用f时,f(a); 传进f函数 的地址a即&a[0],所以就是要把a[0]+5

这样结果就是 6,2,3,4,5,

*q=a[0]
所以f函数改变的始终是a[0],即5次循环后a[0]=6,其他的没变
所以输出的是6,2,3,4,5

因为数组的传递是靠指向数组第一个变量的指针来传递的,那么你在函数中没有定义对数组里哪个变量进行操作,它就会默认对第一个变量进行操作,即a[0]执行了5次加1 变成了6,其他变量则保持不变

我看你这答案可能有问题吧!f(a)是抟地址给*q的,而(*q)++是指向a(5)={1,2,3,4,5}的首地址(1);它先计算再加1的,所以我的答案是2,3,4,5,6.