- Objective-C和Sprite Kit游戲開發從入門到精通
- 曹化宇
- 634字
- 2021-01-07 18:57:38
2.9 指針
相信很多學習過C語言的讀者會對指針操作記憶深刻,對于初學者,指針真的讓人頭疼。不過,在我們的代碼中,指針卻又是必不可少的編程工具,我們還是先簡單了解一下吧。
首先,我們從形式上看一下指針與普通變量有什么不同,如下面的代碼。
int numInt = 99; int *ptInt = &numInt;
代碼中,numInt變量被定義為int類型;接下來是*ptInt,它也是int類型的,只不過*符號說明這是一個指針,而指針所指向的位置保存的數據是int類型的,即ptInt是一個int指針類型的變量。
那么,ptInt指向的位置是哪兒呢?代碼中的&numInt為我們提供了線索,其中的&符號稱尋址運算符,&numInt表示獲取numInt變量在內存中的地址,而ptInt指向的就是這個地址。
這個地址在哪?大概就是內存中的某個位置吧,我們可以使用如下代碼看一下。
NSLog(@"%Li", &numInt);
在代碼中,我們幾乎不會直接使用這個內存地址,而總是通過指針來操作地址中的數據。下面的代碼,會顯示numInt變量的值,包括使用指針來訪問它。
NSLog(@"%i", numInt); NSLog(@"%i", *ptInt);
在這里,我們再次使用了*運算符,它稱為間接訪問運算符,通過它可以獲取指針所指向的內存區域中的數據。
通過上面的操作,我們應該知道ptInt指針指向的就是numInt變量的位置,那么,我們修改其中一個的數據會怎么樣呢?下面的代碼就演示了這些操作。
int numInt = 99; int *ptInt = &numInt; NSLog(@"%i\n", numInt); NSLog(@"%i\n", *ptInt); // numInt = 10; NSLog(@"%i\n", numInt); NSLog(@"%i\n", *ptInt);
我們可以看到,修改其中一個變量的值后,兩個變量獲取的值都會變化,這說明它們真的是相同位置的數據。
此外,如果我們需要斷開指針與內存位置的關系,可以將指針設置為空指針,可以將指針變量設置為NULL值或nil值,如ptInt = NULL。不過應注意,玩失聯在很多時候并不是令人愉快的事情。