gjs_5992946 2019-09-06 01:46 采纳率: 100%
浏览 689
已采纳

C语言中 数组名何时代表数组首元素地址的指针何时代表整个数组

问题如题,代码中有注释

#include

#define SIZE 4

int sum(int marbles1[], int n);

int main(void)

{
int answer;
int marbles[SIZE] = {20,10,30,40};

printf("The size of marbles is %u bytes.\n", sizeof marbles);
answer =sum(marbles, SIZE);//调用函数

getch();
return 0;

}

int sum(int marbles1[], int n)//如果此处marbles1是指向首元素地址的指针,主函数体中的调用函数中的marbles参量也应该是指针,为什么主函数体中的marbles占字节大小是16----即被认成了整个数组包含了4个整数
{
int i;
int total = 0;

for(i =0;i <n; i++)
    total += marbles1[i];
printf("The size of marbles1 is %u bytes.\n", sizeof marbles1);

return total;

}//以上两个数组名一个marbles,一个marbles1一个结果是16,一个是4;我就想知道,数组名什么时候把它认成指向首元素的地址,什么时候把它认成代表整个数组?图片说明

  • 写回答

2条回答 默认 最新

  • lx614happy 2019-09-06 11:17
    关注

    首先 数组名的值是数组首元素的指针常量,也就是指向数组首元素的指针
    第二 对数组名使用sizeof运算符会得到整个数组所占的内存大小,这里还是指的实参
    第三 函数调用时,数组名退化成指针,即形参,这时sizeof只能获得指针的大小
    所以 你第一次是对一个实参数组名sizeof, 但是第二次只是对一个指向这个数组的指针进行的sizeof

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集