gjs_5992946 2019-09-06 01: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 11:17
    关注

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

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

报告相同问题?

悬赏问题

  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据
  • ¥15 分别有什么商家下面需要非常多的骑手为它工作?