永发信息网

c语言 二维数组 数组名和*数组名 的区别?

答案:2  悬赏:30  手机版
解决时间 2021-06-06 22:10
  • 提问者网友:留有余香
  • 2021-06-06 14:18

我写了这样一个程序:

int main(int argc, char *argv[])
{
void average(int *p,int n);
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
average(*a,12);
system("PAUSE");
return 0;
}
void average(int *p,int n)
{
float *pe,sum=0,aver;
pe=p+n-1;
for(;p<=pe;p++)
sum=sum+(*p);
aver=sum/n;
printf("%5.2f",aver);
}

输出正常,但是把第5行调用AVERAGE函数的实参改为(a,12)时,我发现输出居然是一样的!!

这是为什么?

最佳答案
  • 五星知识达人网友:过活
  • 2021-06-06 15:28
a本身就是地址(一个int*)
对a解引用得到a[0]的地址,这个地址还是一个int*,而且和a所表示的地址相同
因为多维数组的存储其实是连续的
所以在这里a和*a 其实都是a,也就是数组的首地址,传过去没影响
全部回答
  • 1楼网友:拾荒鲤
  • 2021-06-06 16:42

因为你调用的是数组,数组名本来就代表数组的第一个地址,所以说数组名就是一个地址

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯