//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
Using pointer2
or pointer3
产生相同的二进制文件,除了操作之外++pointer2
正如所指出的瓦兹克雷格 https://stackoverflow.com/users/1322972.
我建议使用typedef
(产生与上面相同的二进制代码pointer3
)
typedef int myType[100][280];
myType *pointer3;
Note:从 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)
Note:如果数组tab1
在函数体内使用 => 该数组将被放置在调用堆栈内存中。但堆栈大小是有限的。使用大于可用内存堆栈的数组会产生堆栈溢出 crash https://en.wikipedia.org/wiki/Stack_overflow#Very_large_stack_variables.
完整的代码片段可在线编译gcc.godbolt.org http://goo.gl/spzzLb
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;
}