int (*p)[4] , *ptr;
int a[4] = {10,20,30,40};
printf("%p\n%p\n%p",&a,a,&a[0]);
p = &a ;
//p=a; gives error
//ptr = &a; gives error
ptr = a;
出力:
0x7ffd69f14710
0x7ffd69f14710
0x7ffd69f14710
、、、が何を返すのかa
、そしてその開始変数のメモリアドレスを理解しようとしました。では、なぜこれらの割り当ての一部でエラーが発生するのですか?&a
&a[0]
つまり、うまくp = &a = 0x7ff...
いったら、どうしてp = a = 0x7ff..
ですか?
可能であれば、このpとptrが実際にどこを指しているのかをブロック図で理解してください。それとも彼らは同じことを指しているだけですか。しかし、それらは確かに私が知っている異なるものです。
ポインターがさまざまな色(intへのポインターの場合は赤、配列へのポインターの場合は緑など)のレーザーポインターであり、変数は正しいレーザーポインターで指すことができるものであると想像してください。つまり、緑のレーザーポインターを使用してchar変数を指します。
さて、あなたはint a[4]
(4intの)配列を持っています。緑のポインターを使用してポイントしint (*green)[4] = &a;
ます。...a[0]
赤のポインターでポイントできるint()もありますint *red = &a[0]; /* in most contexts 'a' by itself is converted to "address of first element": &a[0] is the same as a */
。
次に、色覚異常の友人にポインタが指している場所を尋ねます:)
友人に関する限り、それらは等しく、同じ「場所」を指します...しかし、あなたは友人をだましました!コンパイラは色覚異常であり、だまされるのは好きではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加