我正在讀的TCPL被K & R,當我讀一些有關數組和指針,我寫低於這個小的代碼:當我使用數組名稱作爲參數調用函數時會發生什麼?
#include <stdio.h>
int sum(int a[])
{
int t = 0;
int length = sizeof(a)/sizeof(a[0]) ;
// printf("%d\n",length);
for(int i = 0; i != length; ++i)
{
t += a[i];
}
return t;
}
int main()
{
int b[5] = {1, 2, 3, 4, 5};
printf("%d\n",sum(b));
return 0;
}
輸出答案是1而不是15,則我通過添加調試代碼printf("%d\n",length);
輸出長度爲1而不是5 的TCPL告訴一個數組名稱轉換爲指針當數組名作爲參數,但輸出的答案是錯誤的,所以我想知道的是:
- 什麼時候調用happend用數組名稱作爲參數的函數?
- 數組
a[]
使用參數sum(int a[])
是否有存儲? - 我在調用數組時看到兩種樣式:
fun(int a[]); fun(b)
和fun(int *a);fun(b)
,有什麼區別?
THX非常:-)
'INT長度=的sizeof(A)/的sizeof(A [0]);'的sizeof(a)是4個字節,的sizeof( a [0])也是4個字節。如何使用length()? – Sergio 2013-03-19 07:59:39
這個問題每天大概需要3-4次。 – cnicutar 2013-03-19 07:59:39
加上你的'for'不正確。它應該是'for(int i = 0; i <= length; ++ i){...}' – varnie 2013-03-19 08:03:14