讓我們來 看一下以下的**
int a=10;
int b=20;
int *p= &a;
*p=10;
p=&b;
*p=200;
p=&a;
int **pp=&p;
*pp=&a;
**pp=1000;
*pp=&b;
**pp=2000;
看到這樣的**是不是一臉的懵逼,現在讓我們來看看他的每一句都是什麼意思。
開始之前我們先了解一下指標和解引用。
指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(pointsto)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。當然這是官方語言,(通俗說;指標就是位址,可以通過它找到以它為位址的記憶體單元)
解引用 "*"的作用是引用指標指向的變數值,引用其實就是引用該變數的位址,「解"就是把該位址對應的東西解開,解出來,就像開啟乙個包裹一樣,那就是該變數的值了,所以稱為"解引用」。
接下來我們來看看每一句都是什麼意思。
int *p= &a; //定義乙個整型指標p 並且p指向了a的位址 (&取位址)
*p=10; //解引用, 即 給a賦值10;
p=&b; // p指向了 b的位址
*p=200; //解引用, 即 給b賦值200;
p=&a; // p指向了a的位址
int **pp=&p; // 定義乙個整型的指標 pp 並且pp 指向了 p的位址
*pp=&a; // pp指向了p的位址 p指向了a的位址 即pp指向了a的位址
**pp=1000; //解引用,即給a賦值1000;
*pp=&b; // pp指向了p的位址 p指向了b的位址 即pp指向了b的位址
**pp=2000; //解引用, 即 給b賦值1000;
這裡我們需要注意一下 在定義是*p 代表的是,定義乙個指標,而其他的時間都是 解引用。
初識C 之指標與引用
1 what a.指標 指標可以看做是乙個特殊的變數,它是用來存放變數的位址值的。b.引用 引用的話,可以看做是給變數起的乙個別名,而不是定義乙個新變數,它與那個變數的本質是相同的,內容與位址都是一樣的。2 distinction a.引用使用時無需解引用 指標需要解引用 b.引用沒有 const,...
C語言 傳指標和解引用,野指標和空指標
乙個函式的改變要影響另乙個函式需要兩個條件 1 傳指標。2 解引用。通過交換a和b數值的例項來說明其重要性 在主函式中輸入a和b的值 int a 10 int b 20 預期輸出結果為a 20 b 10。明顯與預期結果不符。原因 沒有傳指標!具體操作為 也與預期結果不符。原因 沒有解引用。與預期相符...
C Primer 筆記四 初識指標和引用
引用 引用是某個已存在物件的別名,實現了對其他物件的間接訪問。引用本身不是物件。其定義如下 int ival 1024 int refval ival 一般初始化變數時,初始值被拷貝到新建物件中。而定義引用時,程式把引用和它的初始值繫結在一起,一旦初始化完成,將無法把引用重新繫結到另乙個物件上,因此...