在函数内部使用时 c 数组大小的变化

c array size's change when used inside a function

我有这段代码:

#include <stdio.h>

int max_number(int numbers_array[]);

int main(){
    int numbers_array[] = {10, 20, 30, 40, 50, 10, 60, 2500, 25555};
    printf("size: %d\n", sizeof(numbers_array));
    max_number(numbers_array);
    return 0;
 }

int max_number(int numbers_array[]){
    printf("size of array: %d\n", sizeof(numbers_array));
}

输出为:

size: 36
size of array: 8

但是输出应该是一样的吧? 有谁知道问题出在哪里? 非常感谢你。

当然可以。 首先是声明变量的大小

int numbers_array[] = {10, 20, 30, 40, 50, 10, 60, 2500, 25555}

即使在编译时它的大小也是众所周知的:9 个元素 * 每个 4 个字节 = 36 个字节

第二个是一个整数指针的大小,8字节(64位寻址)

重点是函数无法随时知道其数组参数的大小。由于数组是指针,它总是只能看到一个指针。

以下

int max_number(int numbers_array[])

等同于

int max_number(int *numbers_array)

数组在用作函数的参数时会衰减为指针。因此,如果您在函数内部检查数组变量的大小,它将显示指针的大小。因此,如果您有疑问,如何找到数组的大小,最简单的答案是将其作为另一个变量传递给函数。

更多信息:http://c-faq.com/aryptr/aryptrparam.html

不,不应该。在声明数组的 main() 中,sizeof returns 分配的大小:36 字节。在 max_number 内部,它不知道分配给数组的字节数,因为它只传递了一个指针,而 sizeof 只是给出了指针的大小(8 个字节)。