2012-04-22 20 views
5

可能重复:
sizeof array of structs in C?
sizeof an array passed as function argumentÇ - 的sizeof int数组总是返回4

只是想编写一个基本的sum()功能。

int sum(int arr[]) { 
    int total = 0 , i = 0 , l = sizeof arr; 

    for(i=0;i<l;i++) { 
     total += arr[i]; 
    } 

    return total; 
} 

l总是等同于4(我知道最终由sizeof int把它)

在Windows 7

+2

'arr'是一个指针,而不是一个数组。你在函数声明中使用的语法只是'int sum(int * arr)'的特别之处。您可能想阅读[comp.lang.c常见问题](http://c-faq.com/)的第6部分。 – pmg 2012-04-22 15:18:17

+0

在64位机上进行编译时,您应该看到8,因为您正在查看指针的大小而不是数组的大小。 – 2012-04-22 15:21:09

回答

11

使用默认的编译器选项运行开发-C++作为函数参数数组衰变为指针到元素类型,因此sizeof arrsizeof(elem*)

您必须将元素的数量作为额外的参数传递,没有办法从指向数组的第一个元素的指针(这是在那种情况下实际传递的元素)。

+0

如果问题包含'4',请发送'sizeof(指针)' 2012-04-22 15:14:18

+0

如何指向数组本身而不是第一个元素?把这个长度作为第二个参数并不是程序员必须适应的弱点。 – 2012-04-22 23:10:15

+1

如果你有'int arr [5];',那么'&arr'会给你一个指向一个由5个'int','int(*)[5]'组成的数组的指针。但是,该地址与数组的第一个元素的地址“&arr [0]”相同。你想要什么类型的指针取决于情况。对于数组元素的求和,除非你想为每个大小都有不同的函数('int sum_5(int(*)[5]);','int sum_6(int(*)[6]);',来传递'int *'和元素的数量,这就是C的工作原理 – 2012-04-23 08:31:38