5 讓你不再害怕指標 陣列和指標的關係

2021-08-26 01:24:45 字數 1972 閱讀 9891

陣列的陣列名其實可以看作乙個指標。看下例:

例九:int array[10] = ,value; value = array[0]; //也可寫成:value = *array; value = array[3]; //也可寫成:value = *(array+3); value = array[4]; //也可寫成:value = *(array+4);

上例中,一般而言陣列名array 代表陣列本身,型別是int[10],但如果把array 看做指標的話,它指向陣列的第0 個單元,型別是int* ,所指向的型別是陣列單元的型別即int。因此*array 等於0 就一點也不奇怪了。同理,array+3 是乙個指向陣列第3 個單元的指標,所以*(array+3)等於3。其它依此類推。

例十:char *str[3] = ; chars[80]; strcpy(s,str[0]); //也可寫成strcpy(s,*str); strcpy(s,str[1]); //也可寫成strcpy(s,*(str+1)); strcpy(s,str[2]); //也可寫成strcpy(s,*(str+2));

上例中,str 是乙個三單元的陣列,該陣列的每個單元都是乙個指標,這些指標各指向乙個字串。把指標陣列名str 當作乙個指標的話,它指向陣列的第0 號單元,它的型別是char **,它指向的型別是char *。

*str 也是乙個指標,它的型別是char *,它所指向的型別是char,它指向的位址是字串"hello,thisisasample!"的第乙個字元的位址,即'h'的位址。注意:字串相當於是乙個陣列,在記憶體中以陣列的形式儲存,只不過字串是乙個陣列常量,內容不可改變,且只能是右值.如果看成指標的話,他即是常量指標,也是指標常量.

str+1 也是乙個指標,它指向陣列的第1 號單元,它的型別是char**,它指向的型別是char*。

*(str+1)也是乙個指標,它的型別是char*,它所指向的型別是char,它指向"hi,goodmorning."的第乙個字元'h'

下面總結一下陣列的陣列名(陣列中儲存的也是陣列)的問題:

宣告了乙個陣列type array[n],則陣列名稱array 就有了兩重含義:

第一,它代表整個陣列,它的型別是type[n];

第二,它是乙個常量指標,該指標的型別是type*,該指標指向的型別是type,也就是陣列單元的型別,該指標指向的記憶體區就是陣列第0 號單元,該指標自己占有單獨的記憶體區,注意它和陣列第0 號單元佔據的記憶體區是不同的。該指標的值是不能修改的,即類似array++的表示式是錯誤的。

在不同的表示式中陣列名array 可以扮演不同的角色。

在表示式sizeof(array)中,陣列名array 代表陣列本身,故這時sizeof 函式測出的是整個陣列的大小。

在表示式*array 中,array 扮演的是指標,因此這個表示式的結果就是陣列第0 號單元的值。sizeof(*array)測出的是陣列單元的大小。

表示式array+n(其中n=0,1,2,.....)中,array 扮演的是指標,故array+n 的結果是乙個指標,它的型別是type *,它指向的型別是type,它指向陣列第n 號單元。故sizeof(array+n)測出的是指標型別的大小。在32 位程式中結果是4

例十一:

int array[10]; int (*ptr)[10]; ptr = &array;

上例中ptr 是乙個指標,它的型別是int(*)[10],他指向的型別是int[10] ,我們用整個陣列的首位址來初始化它。在語句ptr=&array中,array 代表陣列本身。

本節中提到了函式sizeof(),那麼我來問一問,sizeof(指標名稱)測出的究竟是指標自身型別的大小呢還是指標所指向的型別的大小?

答案是前者。例如:

int(*ptr)[10];

則在32 位程式中,有:

sizeof(int(*)[10])==4

sizeof(int[10])==40

sizeof(ptr)==4

實際上,sizeof(物件)測出的都是物件自身的型別的大小,而不是別的什麼型別的大小。

1 讓你不再害怕指標 細說指標

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別 指標所指向的型別 指標的值或者叫指標所指向的記憶體區 指標本身所佔據的記憶體區。讓我們分別說明。先宣告幾個指標放著做例子 例一 1 int ptr 2 char ptr 3 in...

1 讓你不再害怕指標 細說指標

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別 指標所指向的型別 指標的值或者叫指標所指向的記憶體區 指標本身所佔據的記憶體區。讓我們分別說明。先宣告幾個指標放著做例子 例一 1 int ptr 2 char ptr 3 in...

7 讓你不再害怕指標 指標和函式的關係

可以把乙個指標宣告成為乙個指向函式的指標.int fun1 char int int pfun1 char int pfun1 fun1 int a pfun1 abcdefg 7 通過函式指標呼叫函式。可以把指標作為函式的形參。在函式呼叫語句中,可以用指標表示式來作為實參。例十四 int fun ...