1. 程式人生 > IOS開發 >iOS 指標詳解

iOS 指標詳解

  1. 指標陣列陣列指標 在這裡陣列指標是指向陣列的指標,其本質為指標,指向的物件是陣列。由於陣列的形式多樣所以陣列指標的表達也十分多樣。同理,指標陣列就是存放指標的陣列,其本質為陣列。由於[ ]的優先順序高於*的優先順序,指標陣列陣列指標的表達可做如下表示:
int * p1 [10];  // 指標陣列  p1先與“[ ]”結合構成一個包含10個元素的陣列,int*表示的則是陣列的內容
int (* p2)[10];  // 陣列指標  p2先與“ * ”構成指標定義,int表示陣列內容,[10]表示陣列內元素個數
複製程式碼
  • 由於指向陣列的指標指向普通整型變數的指標不同,在這裡可以再對陣列名&陣列名

    的關係進行理解 在一維陣列中,陣列名表示指向首元素的首地址,是一個指向普通變數的指標常量,當對其+1時偏移量是一個普通資料型別的記憶體大小。而在陣列名前加上取地址符&後,表示的就是一個指向陣列的指標常量,對其+1時偏移量是一個陣列的記憶體大小

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

  • int *p; //首先從P處開始,先與*結合,所以說明P是一個指標,然後再與int結合,說明指標所指向的內容的型別為int型,所以P是一個返回整型資料的指標

  • int p[3]; //首先從P處開始,先與[]結合,說明P是一個陣列,然後與int結合,說明數組裡的元素是整型的,所以P是一個由整型資料組成的陣列

  • int *p[3]; //首先從P處開始,先與[]結合,因為其優先順序比*高,所以P是一個陣列,然後再與*結合,說明數組裡的元素是指標型別,然後再與int結合,說明指標所指向的內容的型別是整型的,所以P是一個由返回整型資料的指標所組成的陣列

  • 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

附:我的部落格地址