📌  相关文章
📜  数组函数参数 'arr' 上的 sizeof' 将返回 'int*' 的大小 [-Wsizeof-array-argument] - C++ 代码示例

📅  最后修改于: 2022-03-11 14:44:55.164000             🧑  作者: Mango

代码示例1
There is no way to determine the length inside the function. However you pass arr,
sizeof(arr) will always return the pointer size. So the best way is to pass the
number of elements as a separate argument.
sizeof only works to find the length of the array if you apply it to the original array.

int arr[5]; //real array. NOT a pointer
sizeof(arr); // :)
However, by the time the array decays into a pointer, sizeof will give the 
size of the pointer and not of the array.

void getArraySize(int arr[]){
sizeof(arr); // will give the pointer size
}
There is some reasoning as to why this would take place. How could we make things
so that a C array also knows its length? A first idea would be not having arrays
decaying into pointers when they are passed to a function and continuing to keep 
the array length in the type system.
When you pass an array to a function it decays to pointer. So the sizeof function
will return the size of int *. This is the warning that your compiler complining
about