//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
使用pointer2
或pointer3
进行操作会产生相同的二进制结果,正如 WhozCraig 所指出的,除非进行++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()
{
int *pointer1 [280];
static_assert( sizeof(pointer1) == 2240, "" );
int (*pointer2)[280];
int (*pointer3)[100][280];
static_assert( sizeof(pointer2) == 8, "" );
static_assert( sizeof(pointer3) == 8, "" );
typedef int myType[100][280];
int tab1[100][280];
myType *pointer;
pointer = &tab1;
(*pointer)[5][12] = 517;
int myint = (*pointer)[5][12];
return myint;
}
int *pointer[280];
)与数组的数组不是同一种东西。 - Some programmer dudepointer = (int(*)[280])tab1
和pointer = (int(*)[100][280])&tab1
。 - undefined