指標陣列:它是乙個陣列,陣列裡面的每個元素都是乙個指標型別。
例如:int *ptr[10],ptr是乙個包含10個int *指標型別的陣列。
1 #include 2
3 int main(void)
4 ;6 int *ptr[3];
7 int len = sizeof(ptr) / sizeof(ptr[0]);
8 for(int i = 0; i < len; i++)
9
12 for(int i = 0; i < len; i++)
13
16 printf("\n");
17 return 0;
18 }
分析:1. 建立乙個3個元素為int型的陣列,如果需要存放這3個元素的位址,可以建立對應的三個指標進行存放,如int *ptr1 = &num[0]、int *ptr2 = &num[1]、*ptr3 = &num[2]。
3. 需要注意運算子的優先順序,這裡分為指標陣列和陣列指標:
① 由於的優先順序大於*,所以ptr[3]先結合為陣列,陣列裡面的元素都為int *型別,所以int *ptr[3]是指標陣列;
② 如果是int (*ptr)[3]的話,由於()優先順序和的優先順序處於同乙個優先順序,但是結合方向都是從左往右,(*ptr)先結合為指標,該指標指向乙個包含10個int型別元素的陣列,所以int (*ptr)[3]為陣列指標。
4. sizeof(ptr)計算的是陣列的總大小,ptr指標陣列包含的是3個int *型別的元素(int *指標型別在32位系統的位元組大小為4,在64位系統中的位元組大小為8),如果是在64位系統下那麼陣列的總大小為24;sizeof(ptr[0])為單個元素的大小,即大小為8,所以sizeof(ptr) / sizeof(ptr[0])為3,也就是元素的個數。
5. 因為指標陣列存放的是int *指標(指標存放位址,型別要一致),所以由ptr[i] = &num[i]為陣列賦值。
6. 如何取指標陣列的值:
① 可以通過*ptr[i],因為ptr[i]存放的是乙個指標元素,即存放物件的位址,所以需要*取值運算子對該位址進行取值;
② 可以通過 *(*(ptr + i)),因為ptr是首元素位址即&ptr[0],i是位址偏移量即第幾個元素,ptr + i就是第幾個元素的位址,*(ptr + i)就是第幾個元素,但是ptr陣列的元素都是指標,所以還需要多乙個*取值運算子進行取值才能得到物件的值。
C語言學習筆記 指標
若觸過組合語言,那麼理解學習c語言中指標就很簡單了。指標,在彙編裡面的表現形式,無非就是定址,直接定址和間接定址。先來學習下,c語言中的4大類資料型別 基本型別 int,long,float,char 構造型別 陣列,結構體 struct,聯合體 union,列舉型別 enum 指標型別 int l...
C語言學習筆記 指標
c語言要玩的好,指標是核心,但是指標在學習的時候看教程往往感覺一看就明白,但是實際用的時候一用就錯,而且還不知道錯在哪。為了更加深刻的了解指標,將學習過程記錄下來,依次加深對指標的理解。先看看一段測試 void fun void int main void 定義乙個變數a,值為100,然後定義乙個一...
C語言學習筆記 指標
get新知識 1 指向二維陣列的指標,如指向int a 3 4 的指標int p 4 p指的是第0行第乙個位址 注意是位址 p 1 指的是第1行第乙個位址,以此類推 p i j 表示第i行第j列的元素。二維陣列本質也是一維陣列。每一行相當於乙個元素。2 指向函式的指標 作用 可以作為另乙個函式的引數...