int arraySum (int array[], int n)
{
int sum = 0, *ptr;
for (ptr = array; ???; ++ptr)
sum += ???
return sum;
}
int n配列のサイズです。
これはあなたの宿題/宿題のようですので、2 つのヒントをあげて、あとは自分で終わらせてください:
ヒント 1 : :へ
のポインターがある場合、参照解除演算子を使用してポインターを参照解除することで、それが指すポインターにアクセスできます。int
int* ptr
int
*ptr
ヒント 2 : 3 回
インクリメントptr
する1
と、同じメモリを指しptr + 3
ます。ptr + 3
がアドレスのメモリを指していることに注意してください&ptr[3]
。
int arraySum (int array[], int n)
{
int sum = 0, *ptr;
for (ptr = array; ptr - array < n; ++ptr)
sum += *ptr;
return sum;
}
1 つ目はに、2 つ目???
は に置き換えます。ptr < &array[n]
*ptr
ポインタはメモリ内のアドレスです。array
アドレスが含まれています (array[0] が配置されている場所)。
array + i
へのポインタも同様ですarray[i]
。
for
ループ内でアドレスを比較ptr
しているため、最後のオブジェクトに到達するまで配列を移動する必要があるため、配列内の最後の要素のアドレスと比較します。したがって、プログラムは次のようになります。
int arraySum (int array[], int n)
{
int sum = 0, *ptr;
for (ptr = array; ptr < &array[n]; ++ptr)
sum += *ptr;
return sum;
}