a detailed introduction to c++ pointer variable, maybe helpful!!! ?
guderian出品
想獲得更佳閱讀體驗?戳對指標變數的型別說明,一般形式為:
型別說明符 *變數名;
其中,*表示這是乙個指標變數,變數名即為定義的指標變數名,型別說明符表示該指標變數所指向的變數的資料型別。
int a = 3;
定義了變數a
,是int
型的,值為3。記憶體中有一塊記憶體空間是放a
的值,對a
的訪問操作就是直接到這個記憶體空間訪問。記憶體空間的位置叫位址,存放3的位址可以用取位址操作符&
對a
運算得到:&a
。
int *p = null;
定義了乙個指標變數p
,p
指向乙個記憶體空間,裡面存放的是乙個記憶體位址。現在賦值為null
(其實就是0,表示特殊的空位址)。
即把a
變數的記憶體空間位址(比如:***)給了p
。顯然,直接對p
訪問,操作的是位址。通過這個位址間接地操作,才是整數3。p的間接操作要使用指標操作符「*」
,即*p
的值才是3。設有指向整型變數的指標變數p
,如要把整型變數a
的位址賦予p
可以有以下兩種方式:
①指標變數初始化的方法
int a; int *p = &a;
②賦值語句的方法
int a; int *p; p = &a;
不允許把乙個數賦予指標變數,故如下的賦值是錯誤的:int *p;p = 1000;
。被賦值的指標變數前不能再加「*」
說明符,故如下的賦值也是錯誤的:*p = &a;
。
指標的幾個相關操作說明表
說明樣例
指標定義:型別說明符 *指標變數名
int *p;
p = &a;
間接運算子:*
*p = 20;
指標變數直接訪問的是記憶體位址
cout<
間接訪問的才是儲存型別的值
cout結果是:20
指標變數同普通變數一樣,使用之前不僅要定義說明,而且必須被賦值具體的值,未經賦值的指標變數不能使用。如定義了int a; int *p = &a;
,則*p
表示p
指向的整型變數,而p
中存放的是變數a
占用單元的起始位址,所以*p
實際上訪問了變數a
,也就是說*p
$ \longleftrightarrow $a
。
【例1】輸入兩個不同的數,通過指針對兩個數進行相加和相乘,並輸出。
#include
#include
using
namespace std;
intmain()
輸出:
a =
10, b =
20 s =
30, t =
200
一般的,指標(int *p
)與普通變數(int a
)的對應關係為:
指標變數
普通變數
p
&a
*p
a
*p = 3
a = 3
以下為指標的一些運算:
指標的幾個初始化操作說明表
方法說明
int *p = null;
null
是特殊的位址0,叫零指標
int a; int *p = &a;
p
初始化為a
的位址
int *p = new(int);
申請乙個空間給p
,*p
內容不確定
要強調的是,對於定義的區域性指標變數,其內容(位址)是隨機的,直接對它操作可能會破壞程式或系統記憶體的值,引發不可**的錯誤。所有程式設計中指標變數要保證先初始化或賦值,給予正確的位址再使用,避免產生*野指標。
【例2】輸入n個整數,使用指標變數訪問輸出。
#include
using
namespace std;
int a[
101]
, n;
intmain()
return0;
}
輸入:
421
60
輸出:
216
0
【說明】p++
的意思是「廣義的加1」,不是p
的值(位址)加1,而是根據型別int
增加sizeof(int)
,即剛好「跳過」乙個整數的空間,達到下乙個整數。
類似的:
①p--
就是向前「跳過」乙個整數的空間,達到前乙個整數。
②(p + 3)
就是指向後面第3個整數的位址。
有時候,乙個指標根據不同的情況,指向的內容是不同型別的值,我們可以先不明確定義它的型別,只是定義乙個無型別的指標,以後根據需要再用強制型別轉換的方法明確它的型別。
【例3】無型別指標運用舉例。
#include
using
namespace std;
int a =10;
double b =
3.5;
void
*p;int
main()
輸出:
10
3.5
【說明】必須明確p
指向的空間的資料型別,型別不一樣的不僅空間大小不相同,儲存的格式也不同。如果把cout<
【例4】雙重指標運用舉例。
#include
using
namespace std;
int a =10;
int*p;
int*
*pp;
//定義雙重指標
intmain()
輸出:
10=10
=10
【說明】多重指標可以多次「間接」訪問資料;演算法競賽上主要的應用是*動態的多維陣列,功能十分強大!!!
以上就是c++指標變數的用法說明,喜歡的話別忘了點讚、收藏?!
我的部落格:
C 指標 指標變數
三 和 小結 四 指標變數的運算 指標變數 存放指標的變數,本質上是乙個整數。指標所指向的值,可以是任何型別資料,如陣列 字串 函式或普通變數 指標變數。定義指標變數與定義普通變數非常類似,不過要在變數名前面加星號 datatype name 或者 datatype name value 表示這是乙...
c 指標變數
指標是c語言的精華部分,通過利用指標,我們能很好地利用記憶體資源,使其發揮最大的效率。有了指標技術,我們可以描述複雜的資料結構,對字串的處理可以更靈活,對陣列的處理更方便,使程式的書寫簡潔,高效,清爽。但由於指針對初學者來說,難於理解和掌 握,需要一定的計算機硬體的知識做基礎,這就需要多做多練,多上...
c語言指標 指標和指標變數
指標是c語言中乙個重要的概念,也是c語言的重要角色。可以說指標是c的精華所在,學習指標雖然不易,但是只要肯花上時間去反覆的理解和實踐,就一定可以很好的掌握它。一 指標是什麼 指標到底是什麼?我們先舉乙個例子。假設我們在火車站 附近開了一家賓館,這家賓館有三千多間屋子,為了方便管理,我們給每個房間都加...