01_C語言系列之指針與指針變量(point)

什么是指針?

在計算機中,所有的數(shù)據(jù)都是存放在存儲器中的。一般把存儲器中的一個字節(jié)稱為一個內(nèi)存單元,不同的數(shù)據(jù)類型所占用的內(nèi)存單元數(shù)不等,如整型量占 4 個單元,字符量占 1 個單元等。為了正確地訪問這些內(nèi)存單元,必須為每個內(nèi)存單元編上號。根據(jù)一個內(nèi)存單元的編號即可準確地找到該內(nèi)存單元,內(nèi)存單元的編號也叫做地址。既然根據(jù)內(nèi)存單元的編號或地址就可以找到所需的內(nèi)存單元,所以通常也把這個地址稱為指針

可以用一個通俗的例子來說明它們之間的關(guān)系:

?我們到銀行去存取款時, 銀行工作人員將根據(jù)我們的帳號去找我們的存款單, 找到之后在存單上寫入存款、取款的金額。在這里,帳號就是存單的指針, 存款數(shù)是存單的內(nèi)容。對于一個內(nèi)存單元來說,單元的地址即為指針,其中存放的數(shù)據(jù)才是該單元的內(nèi)容。

什么是指針變量?

?在C語言中,允許用一個變量來存放指針,這種變量稱為指針變量。一個指針變量的值就是:某個內(nèi)存單元的地址或稱為某內(nèi)存單元的指針。變量的指針就是變量的地址。存放變量地址的變量是指針變量

訪問變量的兩種方式

通過變量名直接訪問

在同一作用域內(nèi),變量名是唯一的,不允許出現(xiàn)兩個變量名相同的變量,這個變量名就和變量的地址一一對應。也可以這么理解:變量名就是變量的地址。這種通過變量名訪問變量的方式就稱為直接訪問。

通過指針變量間接訪問

?我們可以先取出指針變量的值(由定義可以知道,指針變量的值就是某一變量的地址),然后再根據(jù)這個地址來訪問對應的變量,這種訪問方式就稱為間接訪問

指針變量的表示方式

對指針變量的定義包括三個內(nèi)容:

  1. 指針類型說明(基類型);
  2. 指針變量標識符 *;
  3. 指針變量名;

在 C 語言中,我們會使用 * 來標注指針變量,使用的場景不同,* 表示的意思也不同??慈缦麓a:

int main(void)
{
    int a = 10;
    //  定義指針變量 p 時使用 *,*表示變量p時指針變量 
    int * p = &a;
    
    //  這時候使用 * ,表示“指向”,取出指針變量p指向的值,也就是a的值
    printf("%d\n",*p);
    return 0;
}

為什么指針變量必須要指定基類型?

有同學可能會有這樣的疑問:既然指針變量中存儲的是地址,地址在內(nèi)存中又是唯一的,同一時刻不可能有兩個變量占用同一地址,那么為什么要添加基類型呢?存入地址不就夠了嗎?

要知道,不同的數(shù)據(jù)類型在內(nèi)存中占用的字節(jié)數(shù)量和存儲方式是不一樣的,比如 int 占用 4 字節(jié),而 char 就只占用 1 字節(jié);必須知道數(shù)據(jù)類型,才能夠按照存儲單元的長度和存儲形式正確的取出該數(shù)據(jù)。比如:定義一個 int 型的變量,假設(shè)它占用的內(nèi)存單元為 2000~2004 ,那么它的地址就為 2000,系統(tǒng)需要將后邊 3 個單元的數(shù)據(jù)取出,就需要知道它是指向 int 類型的指針變量。

所以,我們可以得出這樣一個結(jié)論:一個指針變量包括兩個方面:一是以存儲單元編號表示的地址,一是它指向存儲單元的數(shù)據(jù)類型

指針變量的簡單使用

  • * 為取值符(或者可以稱 “間接訪問符”),從一個指針變量中取出指針指向的變量的值;
  • & 為取地址符,用來取出一個變量的地址;

看例碼:

int main(void)
{
    int a = 10;
    //  取變量a的地址賦值給指針變量p
    int *p = &a;
    //  從指針變量p中取出a的值賦給b
    int b = *p;
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容