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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题