【发布时间】:2018-09-04 10:22:50
【问题描述】:
考虑以下代码:
void print(int arr[])
{
int n = sizeof(arr)/sizeof(arr[0]);
printf("\nSize is %d",n);
}
int main()
{
int arr[]={1,2,3,4,5,6};
print(arr);
return 0;
}
- 当上述代码在 GCC 6.3 或更低版本中编译时,输出为:
size is 2。 - 在MinGW编译器中编译代码时,输出为
Size is 1
现在相反,我们曾经研究过,当数组作为参数传递时,它只传递数组的基地址(对于隐式指针变量和整数变量都是 4 个字节 em>)。
变量大小是否依赖于编译器,或者我在这里遗漏了什么?请纠正我
【问题讨论】:
-
arr[]是一个点。sizeof(arr)/sizeof(arr[0]);是指针的大小/int的大小。不涉及数组。 -
在 C 中的实践中,每个接受数组的函数都应该被赋予该数组的大小,通常通过其他一些参数
-
int的大小取决于编译器,但编译器理论上可能会根据目标平台、CPU 或编译器开关进行更改。
标签: c gcc parameters mingw