在學習與Objective-C中的指標相關的章節之前,您理解本章很可能有點吃力。
因此,在學習本節之前,我們假設您對Objective-C程式設計語言中的指標有一點了解。陣列名稱是指向陣列第一個元素的常數指標。 因此,在宣告中 -
double balance[50];
balance
是指向&balance [0]
的指標,它是balance
陣列的第一個元素的地址。 因此,以下程式片段為p
分配第一個balance
元素的地址 -
double *p;
double balance[10];
p = balance;
將陣列名稱用作常數指標是合法的,反之亦然。 因此,*(balance + 4)
是balance[4]
存取資料的合法方式。
將第一個元素的地址儲存在p
中後,可以使用* p
,*(p + 1)
,*(p + 2)
等存取陣列元素。 以下是顯示上述所有概念的範例 -
#import <Foundation/Foundation.h>
int main () {
/* 一個擁有 5 個元素的陣列 */
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double *p;
int i;
p = balance;
/* 輸出陣列中所有元素的值 */
NSLog( @"Array values using pointer\n");
for ( i = 0; i < 5; i++ ) {
NSLog(@"*(p + %d) : %f\n", i, *(p + i) );
}
NSLog(@"Array values using balance as address\n");
for ( i = 0; i < 5; i++ ) {
NSLog(@"*(balance + %d) : %f\n", i, *(balance + i) );
}
return 0;
}
執行上面範例程式碼,得到以下結果:
2018-11-15 03:49:56.217 main[177516] Array values using pointer
2018-11-15 03:49:56.220 main[177516] *(p + 0) : 1000.000000
2018-11-15 03:49:56.220 main[177516] *(p + 1) : 2.000000
2018-11-15 03:49:56.220 main[177516] *(p + 2) : 3.400000
2018-11-15 03:49:56.220 main[177516] *(p + 3) : 17.000000
2018-11-15 03:49:56.220 main[177516] *(p + 4) : 50.000000
2018-11-15 03:49:56.220 main[177516] Array values using balance as address
2018-11-15 03:49:56.220 main[177516] *(balance + 0) : 1000.000000
2018-11-15 03:49:56.220 main[177516] *(balance + 1) : 2.000000
2018-11-15 03:49:56.220 main[177516] *(balance + 2) : 3.400000
2018-11-15 03:49:56.220 main[177516] *(balance + 3) : 17.000000
2018-11-15 03:49:56.220 main[177516] *(balance + 4) : 50.000000
在上面的例子中,p
是一個指向double
的指標,它可以儲存double
型別變數的地址。當在p
中有地址,那麼*p
將給出在p
中儲存的地址可用的值,正如在上面的例子中所示的那樣。