指標陣列與陣列指標詳解

2021-08-16 21:35:55 字數 1479 閱讀 9060

指標的陣列

」,首先這個變數是乙個陣列,其次,」指標」修飾這個陣列,意思是說

這個陣列的所有元素都是指標型別

,在32位系統中,

指標佔四個位元組

。陣列指標:

陣列指標可以說成是」陣列的指標」,首先這個變數是乙個指標,其次,」陣列」修飾這個指標,意思是說這個指標存放著乙個陣列的首位址,或者說這個指標指向乙個陣列的首位址。 

根據上面的解釋,可以了解到指標陣列和陣列指標的區別,因為二者根本就是種型別的變數。

指標陣列

char *arr[4] = ;

//arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char *型別的指標,這些指標存放著其對應字串的首位址。

這就相當與定義char *p1 = 「hello」,char *p1 = 「world」,char *p3 = 「shannxi」, char *p4 = 「xian」,這是四個指標,每個指標存放乙個字串首位址,然後用arr[4]這個陣列分別存放這四個指標,就形成了指標陣列。

指標

char (*pa)[4];
這倆個變數名稱一樣就會是這樣:char *pa[4]和char (*pa)[4],原來指標陣列和陣列指標的形成的根本原因就是運算子的優先順序問題,所以定義變數是一定要注意這個問題,否則定義變數會有根本性差別!

char a[4];,
,a是char 型別,a+1,a的值會實實在在的加1,而pa是char[4]型別的,pa+1,pa則會加4,雖然陣列的首位址和首元素首位址的值相同,但是兩者操作不同,所以型別不匹配不能直接賦值,但是可以這樣:pa = &a,pa相當與二維陣列的行指標,現在它指向a[4]的位址(也說明&a是行指標)。

int main(int argc, char *argv)
void fun(char **pp);//子函式中的形參

fun(char *p);//主函式中的實參

void sort(char **pa, int n)//氣泡排序}}

}

char *pa[4] = ;

[root@menwen-linux test]# ./test

abcijk

opqxyz

void fun(int (*p)[4]);//子函式中的形參,指標陣列 

a[3][4] = ;//主函式中定義的二維陣列

fun(a);//主函式呼叫子函式的實參,是二維陣列的首元素首位址

void fun(char **pp);//子函式中的形參

fun(char *p);//主函式中的實參

指標陣列與陣列指標詳解

首先先定義乙個指標陣列,既然是陣列,名字就叫arr char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。當乙個變數出現左右都出現乙個運算子時,沒有記住運算子優先順序的人就會糾結arr變數到底跟哪乙個運算子先結合。如...

指標陣列與陣列指標 詳解

指標陣列和 陣列指標的區別 指標陣列 傳遞多個字串用 int p 10 陣列先運算,指標 修飾陣列 陣列指標 傳遞乙個陣列的首位址用 int p 10 指標先運算,陣列修飾指標,二維陣列和 指標陣列的區別 二維陣列int p 10 20 行列固定 指標陣列int p 10 10個陣列,每個陣列都指向...

指標陣列與陣列指標詳解

首先先定義乙個指標陣列,既然是陣列,名字就叫arr char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。當乙個變數出現左右都出現乙個運算子時,沒有記住運算子優先順序的人就會糾結arr變數到底跟哪乙個運算子先結合。如...