如果有過其他語言基礎的話,Object-C的指針可能就是Java中的變量了。
在Object-C中每個變量都存有了一個內存地址,而且每個內存地址都定義了他的地址,可以使用符合&
運算符進行訪問,該符合表示內存中的地址。
#import <Foundation/Foundation.h>
int main () {
int var1;
char var2[10];
NSLog(@"內存地址: %x\n", &var1 );
NSLog(@"內存地址: %x\n", &var2 );
return 0;
}
## 指針是什麼?
指針就是一個變量,它的值是另一個變量的地址,它與任何變量或常量一樣,必須先聲明指針,然後纔可以使用它來存儲任何變量的地址。
以下是一些數據類型的指針聲明:
```objectivec
int *ip; /*指向int 類型的指針*/
double *dp;
float *ft;
char *ch;
所有指針的值都是實際數據類型的地址值。都是地址內存的長16進制數。
空指針NULL
空指針NULL
是一個常量,返回的數值是0
,要檢查空指針可以用if
,如下:
#import <Foundation/Foundation.h>
int main(){
int *ptr = NULL;
NSLog(@"value is: %x\n",ptr);
if(!ptr){
NSLog("ptr 爲空");
}
return 0;
}
從上可以得出:ptr 爲空
再看一個例子:
#import <Foundation/Foundation.h>
int main(){
int var = 20; /*變量定義*/
int *p; /*指針變量聲明*/
ip = &var; /*在指針變量中存儲var 的地址*/
NSLog(@"value: %x\n",&var);
NSLog(@"ip variable : %x\n",ip); /*存儲在指針變量中的地址*/
NSLog(@"*ip variable: %d\n",*ip); /*使用指針訪問該值*/
return 0;
}
以上輸出日誌爲:
value: 23bea2dc
ip variable: 23bea2dc
*ip variable: 20
學到最後:我可以暫時理解爲Object-C中的指針就是 Java中的變量了嗎??
更多課程請訪問個人主頁:
公衆號: