指標變數是一種特殊的變數,它和以前學過的其他型別變數的不同之處是:用它來指向另乙個變數。
為了表示指標變數和它所指向的變數之間的聯絡,在c++中用「 * 」符號表示指向,例如,i_pointer是乙個指標變數,而 *i_pointer 表示 i_pointer 所指向的變數,見圖6.3。
下面兩個語句作用相同:
c++規定所有變數在使用前必須先定義,即指定其型別。在編譯時按變數型別分配儲存空間。對指標變數必須將它定義為指標型別。先看乙個具體例子:
int i, j; //定義整型變數i,j
int *pointer_1, *pointer_2; //定義指標變數*pointer_1,*pointer_2
第2行開頭的int是指:所定義的指標變數是指向整型資料的指標變數。也就是說,指標變數pointer_1和pointer_2只能用來指向整型資料(例如i和j),而不能指向浮點型變數a和b。這個int就是指標變數的基型別。指標變數的基型別用來指定該指標變數可以指向的變數的型別。
定義指標變數的一般形式為: 基型別 *指標變數名;
下面都是合法的定義:
float *pointer_3; // pointer_3是指向單精度型資料的指標變數
char *pointer_4; // pointer_4是指向字元型資料的指標變數
請注意:指標變數名是pointer_3和pointer_4,而不是*pointer_3和*pointer_4,即「*」不是指標變數名的一部分,在定義變數時在變數名前加乙個「*」表示該變數是指標變數。
pointer_1=&i; //將變數i的位址存放到指標變數pointer_1中
pointer_2=&j; //將變數j的位址存放到指標變數pointer_2中
這樣,pointer_1就指向了變數i,pointer_2就指向了變數j。見圖6.4。
一般的c++編譯系統為每乙個指標變數分配4個位元組的儲存單元,用來存放變數的位址。
在定義指標變數時要注意:不能用乙個整數給乙個指標變數賦初值,在定義指標變數時必須指定基型別。有兩個與指標變數有關的運算子:
例 a 通過指標變數訪問整型變數。
複製純文字新視窗
#include
using
namespace std;
intmain()
#include using namespace std;int main( )
cout<<
"a="
<
" b="
<
cout<<
"max="
<
" min="
<
return0;
}
#include using namespace std;int main( )
{ int *p1,*p2,*p,a,b;
cin>>a>>b; //輸入兩個整數
p1=&a; //使p1指向a
p2=&b; //使p2指向b
if(a運**況如下:
4578↙
a=45 b=78
max=78 min=45
輸入a的值45,b的值78,由於a
請注意,這個問題的演算法是不交換整型變數的值,而是交換兩個指標變數的值。
指標與指標變數
1 i pointer是乙個指標變數,而 i pointer表示i pointer所指向的變數即i。下面兩個語句作用相同 i 3 i pointer 3 2 定義指標變數 基型別 指標變數名 下面都是合法的定義 float pointer 3 pointer 3是指向單精度型資料的指標變數 char...
指標與變數
變數 乙個東西在記憶體裡面,而你想用語言去表示那個東西,就必須找到乙個符合去表示它。它可以是常量 變數 有了變數,你就可以用他傳遞值,呼叫它 修改它,玩弄它,讓他欲罷不能。指標呢?還是不修改原值?如果使用foo mymoney 這種形式的話,就會把mymoney代表的記憶體中的內容 複製 乙份到函式...
陣列變數與指標
背景 完全的c初學者。試圖搞清楚陣列的概念,做了一些小試驗,查了一些解釋,合成此文。我們說陣列變數相當於常量指標,那麼實際它就是常量指標名嗎?簡單試驗 1 include 23 int main 宣告陣列變數 22 printf s 23 printf s 1 24 printf 陣列變的位址佔位 ...