在函数内部使用时 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)
数组在用作函数的参数时会衰减为指针。因此,如果您在函数内部检查数组变量的大小,它将显示指针的大小。因此,如果您有疑问,如何找到数组的大小,最简单的答案是将其作为另一个变量传递给函数。
不,不应该。在声明数组的 main() 中,sizeof returns 分配的大小:36 字节。在 max_number 内部,它不知道分配给数组的字节数,因为它只传递了一个指针,而 sizeof 只是给出了指针的大小(8 个字节)。
我有这段代码:
#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)
数组在用作函数的参数时会衰减为指针。因此,如果您在函数内部检查数组变量的大小,它将显示指针的大小。因此,如果您有疑问,如何找到数组的大小,最简单的答案是将其作为另一个变量传递给函数。
不,不应该。在声明数组的 main() 中,sizeof returns 分配的大小:36 字节。在 max_number 内部,它不知道分配给数组的字节数,因为它只传递了一个指针,而 sizeof 只是给出了指针的大小(8 个字节)。