gjs_5992946 2019-09-05 17:46 采纳率: 100%
浏览 690
已采纳

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 03:17
    关注

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

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

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部