国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

深入解讀C++中的指針變量

2020-01-26 14:52:52
字體:
來源:轉載
供稿:網友

指針變量是一種特殊的變量,它和以前學過的其他類型的變量的不同之處是:用它來指向另一個變量。為了表示指針變量和它所指向的變量之間的聯系,在C++中用“*”符號表示指向,例如,i_pointer是一個指針變量,而*i_pointer表示i_pointer所指向的變量。

下面兩個語句作用相同:

  i=3;  *i_pointer=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。見圖。


一般的C++編譯系統為每一個指針變量分配4個字節的存儲單元,用來存放變量的地址。

在定義指針變量時要注意:不能用一個整數給一個指針變量賦初值,在定義指針變量時必須指定基類型。
引用指針變量

有兩個與指針變量有關的運算符:
&取地址運算符。
 *指針運算符(或稱間接訪問運算符)。

例如:&a為變量a的地址,*p為指針變量p所指向的存儲單元。

【例】通過指針變量訪問整型變量。

#include <iostream>using namespace std;int main( ){  int a,b; //定義整型變量a,b  int *pointer_1,*pointer_2; //定義指針變量*pointer_1,*pointer_2  a=100;b=10; //對a,b賦值  pointer_1=&a; //把變量a的地址賦給pointer_1  pointer_2=&b; //把變量a的地址賦給pointer_2  cout<<a<<" "<<b<<endl; //輸出a和b的值  cout<<*pointer_1<<" "<<*pointer_2<<endl; //輸出*pointer_1和*pointer_2的值  return 0;}

運行結果為:

100 10  (a和b的值)100 10  (*pointer_1和*pointer_2的值)

請對照圖分析。


下面對“&”和“*”運算符再做些說明:
1) 如果已執行了“pointer_1=&a;”語句,請問&*pointer_1的含義是什么?“&”和“*”兩個運算符的優先級別相同,但按自右至左方向結合,因此先進行*pointer_1的運算,它就是變量a,再執行&運算。因此,&*pointer_1與&a相同,即變量a的地址。

如果有pointer_2=&*pointer_1;它的作用是將&a(a的地址)賦給pointer_2,如果pointer_2原來指向b,經過重新賦值后它已不再指向b了,而也指向了a。


2) *&a的含義是什么?先進行&a的運算,得a的地址,再進行*運算,即&a所指向的變量,*&a和*pointer_1的作用是一樣的(假設已執行了“pointer_1=&a;”),它們等價于變量a。即*&a與a等價,見圖。

【例】輸入a和b兩個整數,按先大后小的順序輸出a和b(用指針變量處理)。

解此題的思路是:設兩個指針變量p1和p2,使它們分別指向a和b。使p1指向a和b中的大者,p2指向小者,順序輸出*p1,*p2就實現了按先大后小的順序輸出a和b。按此思路編寫程序如下:

#include <iostream>using namespace std;int main( ){  int *p1,*p2,*p,a,b;  cin>>a>>b; //輸入兩個整數  p1=&a; //使p1指向a  p2=&b; //使p2指向b  if(a<b) //如果a<b就使p1與p2的值交換  {   p=p1;p1=p2;p2=p; //將p1的指向與p2的指向交換  }  cout<<"a="<<a<<" b="<<b<<endl;  cout<<"max="<<*p1<<" min="<<*p2<<endl;  return 0;}

運行情況如下:

4578

主站蜘蛛池模板:
滁州市|
宁阳县|
大兴区|
卫辉市|
赣榆县|
古浪县|
新乡县|
吉林市|
咸丰县|
河间市|
稷山县|
萨嘎县|
若羌县|
公主岭市|
苍溪县|
九江县|
神农架林区|
河南省|
云霄县|
长顺县|
获嘉县|
永川市|
大埔区|
仙桃市|
永靖县|
杨浦区|
惠来县|
绥江县|
纳雍县|
信阳市|
洞口县|
上犹县|
永定县|
宝山区|
惠水县|
日土县|
陕西省|
名山县|
甘泉县|
年辖:市辖区|
荔浦县|