#include <stdio.h>
int main()
{
int i;
i=0;
printf("%d\n%d\n%d\n", i, &i, &(&i));
return 0;
}
私は(私は&)& iはアドレスの値だけであり、それはとても& 0xFFのだと仮定していることだと思うが0xFFでのアドレスでなければなりませんが、なぜそれが有効ではありませんか?なぜCで&(&i)が有効でないのですか?
#include <stdio.h>
int main()
{
int i;
i=0;
printf("%d\n%d\n%d\n", i, &i, &(&i));
return 0;
}
私は(私は&)& iはアドレスの値だけであり、それはとても& 0xFFのだと仮定していることだと思うが0xFFでのアドレスでなければなりませんが、なぜそれが有効ではありませんか?なぜCで&(&i)が有効でないのですか?
6.5.3.2。単項&演算子のオペランドは機能指示、 []または単項*演算子の結果、またはビットフィールドでないオブジェクトを指定して ない左辺値のいずれかでなければならない
- register storage-class指定子で宣言します。
&i
は、オブジェクトのアドレスです。
これは、アドレスは、オブジェクトまたは関数を指定しないように単項&
は、&i
では使用できないことを意味し、また[]
又は*
演算子の結果です。
あなたの例は効果的です:&0
、定数0
は明らかに上記のリストに該当しません。
アドレスとポインタを混同しないでください。アドレスはrvalueです。「アドレス」(&)演算子をそれに適用することはできません。ポインタはオブジェクトです。これは左辺値であり、オペランド'&'です。
簡単に、このように見てください。あなたはハチの巣を持っています。四角で私は蜂蜜を入れました。 &演算子を使用すると、その四角形を参照できます。再び&演算子を使用すると、正方形がある正方形を参照することができます。
もっと正確には& iはメモリの場所を指します。メモリ位置のメモリ位置を参照することはできません。
0xFFのアドレスは何ですか? –
..MouinhoがMan Uを引き継ぐのには意味がないため、 –
は0xFFも定数なので、定数 '0xFF'のアドレスを参照する定数があるはずです。 –