I know there is several questions about that which gives good (and working) solutions, but none IMHO which says clearly what is the best way to achieve this.
So, suppose we have some 2D array :
int tab1[100][280];
We want to make a pointer that points to this 2D array.
To achieve this, we can do :
int (*pointer)[280]; // pointer creation
pointer = tab1; //assignation
pointer[5][12] = 517; // use
int myint = pointer[5][12]; // use
or, alternatively :
int (*pointer)[100][280]; // pointer creation
pointer = &tab1; //assignation
(*pointer)[5][12] = 517; // use
int myint = (*pointer)[5][12]; // use
OK, both seems to work well. Now I would like to know :
- what is the best way, the 1st or the 2nd ?
- are both equals for the compiler ? (speed, perf…)
- is one of these solutions eating more memory than the other ?
- what is the more frequently used by developers ?
Best Answer
Using
pointer2
orpointer3
produce the same binary except manipulations as++pointer2
as pointed out by WhozCraig.I recommend using
typedef
(producing same binary code as abovepointer3
)Note: Since C++11, you can also use keyword
using
instead oftypedef
in your example:
Note: If the array
tab1
is used within a function body => this array will be placed within the call stack memory. But the stack size is limited. Using arrays bigger than the free memory stack produces a stack overflow crash.The full snippet is online-compilable at gcc.godbolt.org