看到這樣一串**。。。。。。
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;//
解引用,即給
a賦值1000
;這裡我們需要注意一下 在定義是*p 代表的是,定義乙個指標,而其他的時間都是 解引用。
指標初步認識
int a 10 p p a 0 p a 形式 含義 p p先加1,再取p的值 p p指向的物件加1 有 p 和 p 先取 p的值,再p 指標間可以相減,不可相加,相加無實際意義。說明 是變址運算子,即a i a i 使用指標指向陣列元素注意事項 1.可以通過改變指標變數的值指向不同元素 2.不用p...
智慧型指標的初步認識
開闢了記憶體空間,必定要釋放記憶體空間,如果不釋放就會造成記憶體洩漏,引發安全問題。如果 量很少的時候,我們會記得釋放掉開闢的空間,但是如果 量過大,我們會忘記開闢的空間,那麼就需要智慧型指標來幫助我們自動釋放空間。例如 include intmain 有了智慧型指標,下面的釋放空間的語句我們就不需...
智慧型指標初步認識 自己實現
目的 new出來的物件,需要程式設計師自己釋放堆上的空間,智慧型指標就是把堆上的空間同棧一起釋放 過載 讓智慧型指標像普通指標一樣使用 分析更簡單明瞭 include using namespace std class person void showage person private int m...