【发布时间】:2015-08-03 22:45:08
【问题描述】:
我有这段代码:
#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
但是输出应该是一样的吧? 有谁知道问题是什么? 非常感谢你。
【问题讨论】:
-
不,不应该。在声明数组的 main() 中,sizeof 返回分配的大小:36 字节。在 max_number 内部,它不知道分配给数组的字节数,因为它只传递了一个指针,而 sizeof 只是给出了指针的大小(8 个字节)。
-
有一种方法可以检测数组的大小,但最好只是将大小作为附加参数传递。
-
发布的代码无法干净地编译。 1) sizeof() 返回“size_t”,而不是“int”,因此两个 printf() 语句都需要更正格式字符串。 2) max_number() 函数被声明为返回一个'int',但没有返回语句。强烈建议:编译时,启用所有警告(对于gcc,至少使用:'-Wall -Wextra -pedantic')
-
@Beta:令人印象深刻。你如何在 C 中模拟模板? ;-)
-
@Olaf [facepalm!] 没关系...