以下のコードを実行すると、4として出力されます。与えられたCコードでポインタ減算によって生成される値
このコードでは何が起こっているのか説明できます。私の理解から
:[1]すなわち配列要素20のアドレスの
アドレスは、ポインタ変数pに格納され、60のアドレスは、変数qに格納されます。 q-pが実行され、印刷されます。しかし、 私は出力が何か違うと予想しました。
たとえば、最初の要素の開始アドレスを100とみなし、各要素が整数の場合は2バイトを使用します。 [0]アドレスは100、a [1] 102、a [2] 104、a [3] 106、a [4] 108、a [5] 110である。
[5] -address of a [1] = 110-102 = 8
ただし、値は4です。どこに何かが見当たりませんか?
Here(codepadリンク)はCコードです:
int main()
{
int a[] = { 10, 20, 30, 40, 50, 60 };
int *p = &a[1], *q = &a[5];
printf("%d",q - p);
return 0;
}
'5 - 1 = 4'なので、インデックス値の差異。 –
intポインタはmemアドレスをステップ数でカウントするため、4は[1]と[5]の間のメモリ/サイズ(int)の量を表します。 – George
値を差し引くには '* q - * p'が必要です。あなたが現在行っていることは、自分の記憶値を減算することです(これは、単に5 - 1を行うことと変わりありません)。 – Rockybilly