THU_LSM 发表于 2020-5-1 22:24:41

函数中数组形参占用空间大小

void get_array(int a[]);
void get_array(int a[])
{       
        printf("get_array函数中,sizeof(a)=%lu\n",sizeof(a));
       
}
void main()
{
       
        int a = {1,2,3,4,5,6,7,8,9,0};
        printf("main函数中,sizeof(a)=%lu\n",sizeof(a));
       
        get_array(a);
}

main函数中,sizeof(a)=40
get_array函数中,sizeof(a)=8

为啥不是get_array函数中,sizeof(a)=4呢?

人造人 发表于 2020-5-1 22:29:40

因为你的环境是 64位的

THU_LSM 发表于 2020-5-1 22:35:21

人造人 发表于 2020-5-1 22:29
因为你的环境是 64位的

那为啥main函数中,sizeof(a)=40呀?8 * 10 = 80 才对呀,数组里面有十个元素。

人造人 发表于 2020-5-1 22:37:05

THU_LSM 发表于 2020-5-1 22:35
那为啥main函数中,sizeof(a)=40呀?8 * 10 = 80 才对呀,数组里面有十个元素。

你的系统上一个int是4个字节

永恒的蓝色梦想 发表于 2020-5-1 22:37:26

THU_LSM 发表于 2020-5-1 22:35
那为啥main函数中,sizeof(a)=40呀?8 * 10 = 80 才对呀,数组里面有十个元素。

get_array函数中,sizeof(a)=8 是因为 a 是指针

THU_LSM 发表于 2020-5-1 22:53:01

永恒的蓝色梦想 发表于 2020-5-1 22:37
get_array函数中,sizeof(a)=8 是因为 a 是指针

可是小甲鱼的视频里面二者就是十倍的关系呀 一个是4 一个是40 。。。。

jkluoling1992 发表于 2020-5-2 00:16:58

本帖最后由 jkluoling1992 于 2020-5-2 00:18 编辑

void get_array(int a[])
{      
      printf("get_array函数中,sizeof(a)=%lu\n",sizeof(a));
      
}
这个函数其实就是
void get_array(int *a)
{      
      printf("get_array函数中,sizeof(a)=%lu\n",sizeof(a));
      
}
a是一个指针,指向了数组第一个元素,在64位系统中,指针的大小为8字节,
在32位系统指针大小为4字节

在main函数中,a是一个包含10个int类型数据的数组,求他的数组空间大小,就是4*10

永恒的蓝色梦想 发表于 2020-5-2 07:27:07

THU_LSM 发表于 2020-5-1 22:53
可是小甲鱼的视频里面二者就是十倍的关系呀 一个是4 一个是40 。。。。

小甲鱼的电脑应该是32位的,64位电脑都是指针都是8
页: [1]
查看完整版本: 函数中数组形参占用空间大小