C語言 指標陣列和指向指標的指標

2021-09-23 10:29:21 字數 1833 閱讀 4443

指標陣列的概念:

乙個陣列的元素值為指標則是指標陣列。 指標陣列是一組有序的指標的集合。 指標數

組的所有元素都必須是具有相同儲存型別和指向相同資料型別的指標變數。

指標陣列說明的一般形式為:

型別說明符 *陣列名[陣列長度]

其中型別說明符為指標值所指向的變數的型別

指標陣列型別表示的是多個指標(一組有序指標)在一般形式中"*指標陣列名"兩邊不能有

括號。例如:

int *pa[3]

表示 pa 是乙個指標陣列,它有三個陣列元素,每個元素值都是乙個指標,指向整型變數。因為的優先順序高於*運算子,所以pa[3]表示乙個陣列,而int*是乙個指標定義,則表示pa[3]表示的是乙個陣列指標變數,陣列裡面存放的是int型別的指標,指向int型別資料的位址。

int main()

,,};

int *p[3]=;

int i=0;

//p=;

printf("%d\n",*(*(p + 1) + 3));

return 0;

}

應該注意指標陣列和二維陣列指標變數的區別。這兩者雖然都可用來表示二維陣列,但

是其表示方法和意義是不同的。

二維陣列指標變數是單個的變數,其一般形式中"(*指標變數名)"兩邊的括號不可少。

如:int (*p)[3];

表示乙個指向二維陣列的指標變數。該二維陣列的列數為 3 或分解為一維陣列的長度為

3。(*p)先結合成指標型別,然後與陣列結合,定義陣列裡面的資料型別是int型,表示指標p是指向陣列裡面int的資料

int main()

,,};

int (*p)[4];

int i=0;

p=a;

printf("%d\n",(*p)[11]);

printf("%d\n",p[1][2]);

return 0;

}

如果乙個指標變數存放的又是另乙個指標變數的位址,則稱這個指標變數為指向指標的

指標變數。

通過指標訪問變數稱為間接訪問。由於指標變數直接指向變數,所

以稱為「單級間址」。而如果通過指向指標的指標變數來訪問變數則構成「二級間址」。

定義乙個指向指標型資料的指標變數:char **p;

p 前面有兩個*號,相當於*(*p)。顯然*p 是指標變數的定義形式,如果沒有最前面的*,那就

是定義了乙個指向字元資料的指標變數。現在它前面又有乙個*號,表示指標變數 p 是指向

乙個字元指標型變數的。*p 就是 p 所指向的另乙個指標變數。

main()

;//指標陣列

char **p;//定義指向指標的指標

int i;

for(i=0;i<5;i++)

}

p 是指向指標的指標變數。

main()

;int *num[5]=;//指標陣列存放陣列a內容的位址

int **p,i;

p=num;//陣列a的位址存放在指向指標的指標變數p的位址上

for(i=0;i<5;i++)

//**p要雙重解引用,才能讀取最上面的值

}

指標陣列的元素只能存放位址。

對於什麼時候用**p,什麼時候用*p,就是當指標陣列裡面的元素存放位址的時候,就使用**p,當指標陣列裡面的元素是字串等一些值的時候,就使用*p

指標陣列和指向指標的指標

今天終於弄明白了,指標陣列,和指向指標的指標的區別。1 include 2 include 3 void main 4 11 for i 0 i 3 i 12 15 一 指標概念 當我們程式如下申明變數 short int i char a short int pi 程式會在記憶體某位址空間上為各變...

C和指標之指標陣列和指向陣列的指標

定義乙個指標陣列,該陣列中每個元素是乙個指標,每個指標指向 就需要程式中後續再定義 int p 10 定義乙個陣列指標,該指標指向含10個元素的一維陣列 陣列中每個元素是int型 int p 10 我們知道二維陣列名是指向第乙個元素的指標,比如int a3 4 這裡a就是指向乙個包含4個元素陣列的指...

指標 陣列指標 指標陣列 指向指標的指標

程式中一般通過變數名對變數進行訪問操作,其實質是通過位址進行的。對變數的訪問分為直接訪問和間接訪問,如語句 printf d i 執行的時候,根據變數名 與位址的對應關係,找到i的位址,依次取相應的位元組數中的資料 即i的值 把它輸出。這種按照變數位址訪問變數值的方式成為直接訪問 還可以將變數i的位...