官术网_书友最值得收藏!

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。不過應注意,玩失聯在很多時候并不是令人愉快的事情。

主站蜘蛛池模板: 剑阁县| 那坡县| 田林县| 偏关县| 三穗县| 竹北市| 马公市| 阿鲁科尔沁旗| 卢湾区| 建瓯市| 万山特区| 新竹市| 育儿| 农安县| 依安县| 尉犁县| 甘德县| 泸西县| 永平县| 洞口县| 弋阳县| 新龙县| 莱州市| 西乌珠穆沁旗| 深水埗区| 中牟县| 台安县| 左贡县| 龙山县| 拜泉县| 邵阳市| 北京市| 梁平县| 依安县| 中山市| 天祝| 甘德县| 巴彦县| 沙湾县| 龙岩市| 通渭县|