//defines an array of 280 pointers (1120 or 2240 bytes)
int *pointer1 [280];
//defines a pointer (4 or 8 bytes depending on 32/64 bits platform)
int (*pointer2)[280]; //pointer to an array of 280 integers
int (*pointer3)[100][280]; //pointer to an 2D array of 100*280 integers
WhozCraigによって指摘された操作を除いて、同じバイナリを使用pointer2
または生成します。pointer3
++pointer2
使用をお勧めしtypedef
ます(上記と同じバイナリコードを生成しますpointer3
)
typedef int myType[100][280];
myType *pointer3;
注: C++11 以降、キーワードusing
の代わりにキーワードを使用することもできます。typedef
using myType = int[100][280];
myType *pointer3;
あなたの例では:
myType *pointer; // pointer creation
pointer = &tab1; // assignation
(*pointer)[5][12] = 517; // set (write)
int myint = (*pointer)[5][12]; // get (read)
注:配列tab1
が関数本体内で使用されている場合 => この配列はコール スタック メモリ内に配置されます。ただし、スタック サイズには制限があります。空きメモリ スタックより大きい配列を使用すると、スタック オーバーフロークラッシュが発生します。
完全なスニペットは、gcc.godbolt.orgでオンラインでコンパイルできます。
int main()
{
//defines an array of 280 pointers (1120 or 2240 bytes)
int *pointer1 [280];
static_assert( sizeof(pointer1) == 2240, "" );
//defines a pointer (4 or 8 bytes depending on 32/64 bits platform)
int (*pointer2)[280]; //pointer to an array of 280 integers
int (*pointer3)[100][280]; //pointer to an 2D array of 100*280 integers
static_assert( sizeof(pointer2) == 8, "" );
static_assert( sizeof(pointer3) == 8, "" );
// Use 'typedef' (or 'using' if you use a modern C++ compiler)
typedef int myType[100][280];
//using myType = int[100][280];
int tab1[100][280];
myType *pointer; // pointer creation
pointer = &tab1; // assignation
(*pointer)[5][12] = 517; // set (write)
int myint = (*pointer)[5][12]; // get (read)
return myint;
}