爱俯卧撑的123 发表于 2022-1-15 15:33:25

S1E29 为何这里是占40个字节而不是80个字节?

#include <stdio.h>

void get_array(int b);

void get_array(int b)
{
      int i;

      printf("sizeof b: %d\n", sizeof(b));
}

int main()
{
      int a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

      printf("sizeof a: %d\n", sizeof(a));
      get_array(a);

      return 0;
}



在我机器内运行的结果是
a=40
b=8
为啥a不是等于80呢?

傻眼貓咪 发表于 2022-1-15 16:26:11

4 * 10 = 40

jackz007 发表于 2022-1-15 17:08:00

      楼主不妨说说 a = 80 的理由。

大马强 发表于 2022-1-15 17:49:33

整型就是4个字节的
你这个整型数组10个元素,sizeof整个数组的大小 => 10 x 4 = 40
你这机器应该是64位的吧,指针占8字节

壊人shmily 发表于 2022-1-16 23:13:37

A怎么也飞不到80吧?

赚小钱 发表于 2022-1-17 07:32:13

改成long和long long int 试一试

lslhj 发表于 2022-7-28 15:46:54

int 类型是占4个字节,
数组作为形参,传递的是地址,也就是指针,指针变量在64位系统中是8字节,32位系统是4字节

桃花飞舞 发表于 2022-7-29 00:46:59

确实很奇怪,按照函数中数组退化为指针,形参a常量指针的大小为8字节可以推出编译器是用64位的,所以整型变量a应该是8个字节,所以数组的大小为80 == 8 * 10个字节,我也不明白为什么不是80,不过不用纠结这种问题,应该跟编译器有关系

ExiaGN001 发表于 2022-7-30 07:35:13

首先假设lz是64位系统

这样int占32bit即4字节
int即为4*10=40字节
传入get_array函数时传入的是int*而非int
因为是64位系统,所以
需要64bit表示内存地址地址,即8字节
页: [1]
查看完整版本: S1E29 为何这里是占40个字节而不是80个字节?