C语言函数参数int tab[]的sizeof为8字节但int为4字节是什么原因?
原因解释
C语言有一条核心规则:数组作为函数参数传递时,会自动退化为指向数组首元素的指针。你代码中sum函数的形参int tab[],编译器处理时会完全等价为int *tab,所以函数内sizeof(tab)计算的是指针变量的大小,而非整个数组的大小。
对应输出的数值逻辑如下:
- 你当前使用的是64位操作系统,64位系统下所有指针类型的长度固定为8字节,所以
sizeof(tab)输出8。 - 目前主流桌面系统中
int类型的长度统一为4字节,所以sizeof(int)输出4。 - 而
main函数中直接对balls做sizeof运算时,balls还没有退化为指针,保留了原始数组类型,所以总大小为「元素个数×单元素大小」= 10×4 = 40字节,和运行结果一致。
正是因为数组形参会退化为指针,无法在被调函数内直接获取数组总长度,所以通常都会像示例代码一样额外传递一个参数记录数组元素个数,避免访问越界。
内容的提问来源于stack exchange,提问作者oskarfightingthecode
相关产品推荐
相关产品推荐

