私は K&R の TCPL を読んでいます。
#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 NOT 15 です。次にprintf("%d\n",length);
、出力の長さを追加してこのコードをデバッグします。1 NOT 5 です。TCPL は、配列名が引数として使用されると配列名がポインターに変換されることを伝えますが、出力の答えは間違っているので、私は不思議に思う:
- 引数として配列名を使用して関数を呼び出すとどうなりますか?
- で使用される配列
a[]
パラメーターにsum(int a[])
ストレージがあるかどうか。 - 配列を呼び出すときに 2 つのスタイルが表示されます:
fun(int a[]); fun(b)
とfun(int *a);fun(b)
,違いは何ですか?
ありがとうございます:-)