1. ホーム
  2. c++

[解決済み] なぜ x[0] != x[0][0] != x[0][0] なのですか?

2022-05-03 15:35:06

質問

C++を少し勉強しているのですが、ポインターと格闘しています。宣言することで3つのレベルのポインタを持つことができることは理解しています。

int *(*x)[5];

ということで *x へのポインタである5つの要素からなる配列へのポインタです。 int . また、私は x[0] = *(x+0); , x[1] = *(x+1) といった具合に......。

では、上記の宣言があったとして、なぜ x[0] != x[0][0] != x[0][0][0] ?

解決方法は?

x への5つのポインタの配列へのポインタです。 int .

x[0] は配列 への5つのポインタの int .

x[0][0] へのポインタです。 int .

x[0][0][0]int .

                       x[0]
   Pointer to array  +------+                                 x[0][0][0]         
x -----------------> |      |         Pointer to int           +-------+
               0x500 | 0x100| x[0][0]---------------->   0x100 |  10   |
x is a pointer to    |      |                                  +-------+
an array of 5        +------+                        
pointers to int      |      |         Pointer to int                             
               0x504 | 0x222| x[0][1]---------------->   0x222                    
                     |      |                                             
                     +------+                                             
                     |      |         Pointer to int                              
               0x508 | 0x001| x[0][2]---------------->   0x001                    
                     |      |                                             
                     +------+                                             
                     |      |         Pointer to int                              
               0x50C | 0x123| x[0][3]---------------->   0x123                    
                     |      |                                             
                     +------+                                             
                     |      |         Pointer to int                              
               0x510 | 0x000| x[0][4]---------------->   0x000                    
                     |      |                                             
                     +------+                                             

を見ることができます。

  • x[0] は配列であり、式で使用されるとその最初の要素へのポインタに変換されます(例外あり)。したがって x[0] は、その最初の要素のアドレスを与えます。 x[0][0] である 0x500 .
  • x[0][0] のアドレスが含まれています。 int である。 0x100 .
  • x[0][0][0] には int の値です。 10 .

だから x[0] と同じです。 &x[0][0] となるため &x[0][0] != x[0][0] .

したがって x[0] != x[0][0] != x[0][0][0] .