私は非常に単純なことを試みていますが、単純であるはずですが、どういうわけか私をいじっています...
ポインターとして扱われるときの配列に対する ++ の効果と、配列として扱われるときのポインターを理解しようとしています。
そう、
int main()
{
int a[4] = { 1, 4, 7, 9 };
*a = 3;
*(a+1) = 4;
*++a = 4; //compiler error
}
1:では、*(a+1)=4
a[1]=4 を設定します。//Happy しかし、 の場合*++a = 4;
、++ が * の前にあるため、ポインター a が 1 増加すると予想されます。次に * が開始され、4 に等しくなります。しかし、このコードは機能しません...なぜですか?
別の問題:
int main()
{
int* p = (int *)malloc(8);
*p = 5;
printf("%d", p[0]);
*++p = 9; //now this works!
printf("%d", p[1]); //garbage
printf("%d", p[0]); //prints 9
}
2:これで *++p = 9; 正常に動作しますが、実際には配列のように動作していません。2つの違いは何ですか?これは、p をインクリメントして 9 に等しくするだけです。p[0] を出力すると、9 が出力され、p[0] 経由でアクセスすることはできなくなりましたが、*(p-1) は 5 を示しています。まだあります。[0] でポインタをインデックスすると、正確にはどこを指すのでしょうか? 変化したこと?
すべての専門家に感謝します!