iOS 指針詳解

  1. 指針數組數組指針 在這裏數組指針是指向數組的指針,其本質爲指針,指向的對象是數組。因爲數組的形式多樣因此數組指針的表達也十分多樣。同理,指針數組就是存放指針的數組,其本質爲數組。因爲[ ]的優先級高於*的優先級,指針數組數組指針的表達可作以下表示:
int * p1 [10];  // 指針數組  p1先與「[ ]」結合構成一個包含10個元素的數組,int*表示的則是數組的內容
int (* p2)[10];  // 數組指針  p2先與「 * 」構成指針定義,int表示數組內容,[10]表示數組內元素個數
複製代碼
  • 因爲指向數組的指針指向普通整型變量的指針不一樣,在這裏能夠再對數組名&數組名的關係進行理解 在一維數組中,數組名表示指向首元素的首地址,是一個指向普通變量的指針常量,當對其+1時偏移量是一個普通數據類型的內存大小。而在數組名前加上取地址符&後,表示的就是一個指向數組的指針常量,對其+1時偏移量是一個數組的內存大小git

  • int p; //這是一個普通的整型變量github

  • int *p; //首先從P處開始,先與*結合,因此說明P是一個指針,而後再與int結合,說明指針所指向的內容的類型爲int型,因此P是一個返回整型數據的指針數組

  • int p[3]; //首先從P處開始,先與[]結合,說明P是一個數組,而後與int結合,說明數組裏的元素是整型的,因此P是一個由整型數據組成的數組bash

  • int *p[3]; //首先從P處開始,先與[]結合,由於其優先級比*高,因此P是一個數組,而後再與*結合,說明數組裏的元素是指針類型,而後再與int結合,說明指針所指向的內容的類型是整型的,因此P是一個由返回整型數據的指針所組成的數組spa

  • int (*p)[3]; //首先從P處開始,先與*結合,說明P是一個指針,而後再與[]結合,說明指針所指向的內容是一個數組,而後再與int結合,說明數組裏的元素是整型的,因此P是一個指向由整型數據組成的數組的指針指針

  1. 能夠經過以下題目,進一步理解上面的講解
int arrayName[4] = {10, 20, 30, 40};
int *p = (int *)(&arrayName + 1);
NSLog(@"%d", *(p - 1));
複製代碼
  • 答案解析
  1. (&arrayName + 1)&arrayName是數組的地址(等價於指向arrayName數組的指針
  2. 增長1會日後移動16個字節,開始是4個字節的位置,移動後就是16個字節後面的位置(也就是目前位置是20個字節
  3. 最後又賦值給int類型的指針pint類型佔4個字節
  4. 因此(p - 1)就是減去4個字節,變成爲16個字節的位置,輸出的*(p - 1)值爲40

附:個人博客地址code

相關文章
相關標籤/搜索