一維數(shù)組
#define SIZE 100
int scores[SIZE] = {0};
int *p_scores = scores;
二維數(shù)組
#define ROWS 3
#define COLS 4
int sequence[ROWS][COLS] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
}
int (*p_seq)[COLS] = sequence;
其實(shí),p_seq可以指向任何列是COLS的二維數(shù)組。如
int sequence_2[2][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8}
};
int sequence_3[100][COLS] = {
{1, 2, 3, 4},
...
...
};
p_seq = sequence_2; // 有效
p_seq = sequence_3; // 有效
同時(shí)要注意
*p_seq
的括號(hào)不能省略,因?yàn)?code>int (*p_seq)[COLS] 和int *p_seq[COLS]
的語義完全不同。
根據(jù)C語言的語法規(guī)則,方括號(hào)[ ]
的優(yōu)先級(jí)比*
高。什么優(yōu)先級(jí)高,表明其本質(zhì)是一個(gè)什么變量。
不加括號(hào)時(shí),方括號(hào)優(yōu)先級(jí)高,所以
int *p_seq[COLS]
本質(zhì)上是一個(gè)變量名為p_seq
的數(shù)組,它里面存儲(chǔ)的全是指針變量如int *p1, *p2, *p3
,而不是int
。(可以把int *p_seq[COLS]
看作是int *(p_seq[COLS])
,左邊的int *
視為整體,類比整型數(shù)組int seq[COLS]
)加括號(hào)時(shí),
*p_seq
優(yōu)先級(jí)高,它本質(zhì)是一個(gè)指針,指向一個(gè)內(nèi)含COLS
個(gè)int
元素的數(shù)組,即p_seq
是一個(gè)指向數(shù)組的指針。
多維數(shù)組
可以以二維數(shù)組類推
// 三維數(shù)組
int array[2][3][4] = {
//data
};
// 指向三維數(shù)組的指針
int (*ptr)[3][4] = array;