指針和數(shù)組,指針和二維數(shù)組、多維數(shù)組

一維數(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è)什么變量。

  1. 不加括號(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]

  2. 加括號(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;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容