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呢? 4 * 10 = 40 楼主不妨说说 a = 80 的理由。 整型就是4个字节的
你这个整型数组10个元素,sizeof整个数组的大小 => 10 x 4 = 40
你这机器应该是64位的吧,指针占8字节 A怎么也飞不到80吧? 改成long和long long int 试一试 int 类型是占4个字节,
数组作为形参,传递的是地址,也就是指针,指针变量在64位系统中是8字节,32位系统是4字节 确实很奇怪,按照函数中数组退化为指针,形参a常量指针的大小为8字节可以推出编译器是用64位的,所以整型变量a应该是8个字节,所以数组的大小为80 == 8 * 10个字节,我也不明白为什么不是80,不过不用纠结这种问题,应该跟编译器有关系 首先假设lz是64位系统
这样int占32bit即4字节
int即为4*10=40字节
传入get_array函数时传入的是int*而非int
因为是64位系统,所以
需要64bit表示内存地址地址,即8字节
页:
[1]