Differences between array pointers and pointer Arrays
Array pointer (also called row pointer)
Define int (* p) [n];
() A high priority indicates that p is a pointer pointing to an integer one-dimensional array. The length of this one-dimensional array is n, or the step size of p. That is to say, when p + 1 is executed, p must span the length of n integer data.
To assign a two-dimensional array to a pointer, assign a value as follows:
Int a [3] [4];
Int (* p) [4]; // This statement defines an array pointer pointing to a one-dimensional array containing four elements.
P = a; // assign the first address of the Two-dimensional array to p, that is, a [0] Or & a [0] [0].
P ++; // after the statement is executed, that is, p = p + 1; p spans Row a [0] [] pointing to row a [1] []
Therefore, an array pointer is also called a pointer to a one-dimensional array or a row pointer.
Pointer Array
Define int * p [n];
[] High priority. It is first combined with p to form an array, and then int * indicates that this is an integer pointer array, which has n Array elements of pointer type. The execution of p + 1 here is incorrect, so the value assignment is also incorrect: p = a; Because p is an unknown representation, only p [0], p [1], p [2]... p [n-1], and they are pointer variables that can be used to store variable addresses. But it can be like this * p = a; here * p represents the value of the first element of the pointer array and the value of the first address of.
To assign a two-dimensional array to a pointer array:
Int * p [3];
Int a [3] [4];
For (I = 0; I <3; I ++)
P [I] = a [I];
Int * p [3] indicates that three pointer variables exist in the memory of a one-dimensional array, namely p [0], p [1], and p [2].
Therefore, assign values respectively.
In this way, the difference between the two is suddenly clear. The array pointer is just a pointer variable. It seems that the C language is specifically used to point to a two-dimensional array, which occupies the storage space of a pointer in the memory. A pointer array contains multiple pointer variables in memory and occupies the storage space of multiple pointers.
It also needs to be noted that when it is used to point to a two-dimensional array, its reference is the same as the array name reference.
For example, to represent an element in column j of row I in the array:
* (P [I] + j), * (p + I) + j), (* (p + I )) [j], p [I] [j]
Priority: ()> []> *