a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

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

C++指針變量的定義和使用

2020-05-23 14:27:18
字體:
來源:轉載
供稿:網友

指針的類型

同變量的數據類型類似,指針也有類型。之所以指針會有類型,是為了符合對應的變量或常量數據類型。要注意,指針本身也是一種數據類型。

不同指針類型的本質在于不同的操作。這點和快捷方式是類似的。比如雙擊一個可執行文件(.EXE)快捷方式的操作是運行這個可執行文件,而雙擊一個Word文檔文件(.DOC)快捷方式的操作是使用Word程序打開這個文檔。類似地,一個字符型數據在內存中占用一個字節,那么讀取數據就應以字符型數據讀出一個字節;一個長整型數據在內存中占用四個字節,那么讀取數據時就應以長整型數據讀出四個字節。如果指針類型與它所指向的數據類型不匹配,就可能對數據作出錯誤的操作。

指針變量的聲明

指針變量也是一種變量。所以在使用之前,必須先聲明。聲明指針變量的語句格式為:
    指針的類型 *指針變量名;
其中,指針類型應該是與指針所指向的數據相符合的數據類型。比如int、char、float等等。*表示所要定義的是一個指針變量,而不是一個普通變量。指針變量名則應該遵循起變量名的一切規則。
例如:
   char *cptr;//指向字符型變量的指針變量
   int *iptr;//指向整型變量的指針變量

要注意,當我們要聲明多個指針變量時,必須在每個指針變量名前加上*,例如:
   int *iptr1,*iptr2,iptr3;//iptr1和iptr2是指向整型變量的指針變量,而iptr3是整型變量

獲取地址和指針變量初始化

我們已經聲明了指針變量,那么我們如何獲得數據在內存中的地址呢?

在C++中,用&操作符可以獲取變量或常量在內存中的地址,我們稱之為取地址操作符。它的使用格式是:
    &變量名或常量名
既然能夠獲取到數據所在的地址,我們就能把這個地址交給指針了。例如:
    int c=9;
    int *iptr=&c;//聲明指向整型變量的指針變量,并作初始化

這時,我們稱指針iptr指向了變量c。在第三章我們說過,聲明一個未經初始化的變量之后,它的值是無法確定的。所以如果聲明了一個指針卻不對它作初始化,那么它所指向的內容也是無法確定的,而這種情況是十分危險的。

特殊的值——NULL

沒有初始化的指針變量是危險的。可是如果在聲明變量之后,找不到合適的地址進行初始化,我們該怎么辦呢?顯然,隨便找個地址對指針變量做初始化是不負責任的。
在這里,我們引入一個特殊的地址——NULL。它的意思是“空”,即指針沒有指向任何東西。比如:
    int *iptr=NULL;
要注意的是,C++是大小寫敏感的,NULL與null是不同的。所以,在使用的時候必須要大寫。

指針的使用——間接引用

雙擊一個有效的快捷方式,就能夠調用對應的文件,那么我們通過什么方法才能操作指針所指向的變量呢?
在這里,*又出現了,它稱為間接引用操作符。其作用是獲取指針所指向的變量或存儲空間。間接引用的指針可以作為左值。(關于左值概念請參見第三章)具體的使用格式為:
    *指針變量名

下面,我們來看一段程序,實踐一下如何使用指針變量:(程序8.2)
#include "iostream.h"
int main()
{
   int i=3;
   int *iptr=&i;
   int **iptrptr=&iptr;//iptr也是變量,也能夠獲取它的地址
   cout <<"Address of Var i=" <<iptr <<endl;//輸出iptr存儲的內容,即i在內存中的地址
   cout <<"Data of Var i=" <<*iptr <<endl;//輸出iptr所指向的變量
   cout <<"Address of Pointer iptr=" <<iptrptr <<endl;//輸出iptr在內存中的地址
   cout <<"Address of Var i=" <<*iptrptr <<endl;//輸出iptrptr所指向的變量,即iptr
   *iptr=2+*iptr;//*iptr可以作左值
   cout <<"Data of Var i=" <<*iptr <<endl;
   return 0;
}

運行結果:
Address of Var i=0x0012FF7C
Data of Var i=3
Address of Pointer iptr=0x0012FF78
Address of Var i=0x0012FF7C
Data of Var i=5

通過運行結果,我們可以知道變量i在內存中的地址是0012FF7C(前面的0x表示這是一個十六進制的數);指針也是一種變量,在內存中也有地址;間接引用指針以后就和使用指針指向的變量一樣方便。

試試看:
1、如果將程序8.2中的所有整型變量換成字符型變量(把對應的變量數據也換成字符),則執行后會有什么奇怪的現象?請根據第七章的知識,猜想產生這個奇怪現象的原因。
2、如果聲明一個指針變量后不對其進行初始化,而是將其間接引用,作為左值修改它所指向的內存中的數據,會有什么結果產生?
結論:在沒有保護措施的操作系統中,這樣的操作可能會導致系統錯誤甚至崩潰。
3、能否將一個常量的地址賦值給一個對應類型的指針變量?
結論:將一個常量的地址賦給指針變量可能導致通過指針更改常量,所以是不合法的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一区二区三区视频 | 91亚洲国产 | 亚洲黄色大片网站 | 日韩一区二区免费视频 | 二区免费 | 97国产在线视频 | 一区二区日本 | 欧美日韩成人一区 | 日韩激情网 | 一区二区av在线 | 亚洲伦理 | 中文字幕免费观看 | 国产日韩欧美一区二区 | 欧美一区永久视频免费观看 | 欧美日韩在线第一页 | 热久久久久 | 久久久91| 一级一级毛片 | 亚洲视频一 | 亚洲精品电影网在线观看 | 国产高清在线精品 | 欧美精品成人在线视频 | 国产97免费视频 | 欧美一级视频 | 亚洲国产成人av | 亚洲一区二区三区四区在线观看 | 超碰激情| 三级视频网站在线观看 | 男女羞羞视频在线观看免费 | 欧美乱码久久久久久蜜桃 | 亚洲一级毛片 | 福利片免费观看 | 亚洲精品久久久蜜桃 | 亚洲黄色在线观看 | 黄色的网站在线免费观看 | 天天操天天摸天天干 | 四季久久免费一区二区三区四区 | 成人综合av | 精品国产髙清在线看国产毛片 | 国产精品久久一区二区三区 | 精品一区国产 |