最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年09月12日 18:12:25   投稿:goldensun  
這篇文章主要介紹了深入解讀C++中的指針變量,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

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

下面兩個(gè)語句作用相同:

  i=3;
  *i_pointer=3;


定義指針變量

C++規(guī)定所有變量在使用前必須先定義,即指定其類型。在編譯時(shí)按變量類型分配存儲(chǔ)空間。對(duì)指針變量必須將它定義為指針類型。先看一個(gè)具體例子:

  int i, j;              //定義整型變量i,j
  int *pointer_1, *pointer_2;    //定義指針變量*pointer_1,*pointer_2


第2行開頭的int是指:所定義的指針變量是指向整型數(shù)據(jù)的指針變量。也就是說,指針變量pointer_1和pointer_2只能用來指向整型數(shù)據(jù)(例如i和j),而不能指向浮點(diǎn)型變量a和b。這個(gè)int就是指針變量的基類型。指針變量的基類型用來指定該指針變量可以指向的變量的類型。

定義指針變量的一般形式為:
    基類型 *指針變量名;
下面都是合法的定義:

  float *pointer_3; // pointer_3是指向單精度型數(shù)據(jù)的指針變量
  char *pointer_4; // pointer_4是指向字符型數(shù)據(jù)的指針變量


請(qǐng)注意:指針變量名是pointer_3和pointer_4,而不是*pointer_3和*pointer_4,即“*”不是指針變量名的一部分,在定義變量時(shí)在變量名前加一個(gè)“*”表示該變量是指針變量。

那么,怎樣使一個(gè)指針變量指向另一個(gè)變量呢?只需要把被指向的變量的地址賦給指針變量即可。例如:

  pointer_1=&i; //將變量i的地址存放到指針變量pointer_1中
  pointer_2=&j; //將變量j的地址存放到指針變量pointer_2中


這樣,pointer_1就指向了變量i,pointer_2就指向了變量j。見圖。


一般的C++編譯系統(tǒng)為每一個(gè)指針變量分配4個(gè)字節(jié)的存儲(chǔ)單元,用來存放變量的地址。

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

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

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

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

#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; //對(duì)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;
}

運(yùn)行結(jié)果為:

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

請(qǐng)對(duì)照?qǐng)D分析。


下面對(duì)“&”和“*”運(yùn)算符再做些說明:
1) 如果已執(zhí)行了“pointer_1=&a;”語句,請(qǐng)問&*pointer_1的含義是什么?“&”和“*”兩個(gè)運(yùn)算符的優(yōu)先級(jí)別相同,但按自右至左方向結(jié)合,因此先進(jìn)行*pointer_1的運(yùn)算,它就是變量a,再執(zhí)行&運(yùn)算。因此,&*pointer_1與&a相同,即變量a的地址。

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


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

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

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

#include <iostream>
using namespace std;
int main( )
{
  int *p1,*p2,*p,a,b;
  cin>>a>>b; //輸入兩個(gè)整數(shù)
  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;
}

運(yùn)行情況如下:

4578↙
a=45 b=78
max=78 min=45

輸入a的值45,b的值78,由于a<b,將p1的值和p2的值交換,即將p1的指向與p2的指向交換。


請(qǐng)注意,這個(gè)問題的算法是不交換整型變量的值,而是交換兩個(gè)指針變量的值。


相關(guān)文章

  • 一文詳解C++的程序流程控制

    一文詳解C++的程序流程控制

    這篇文章主要介紹了一文詳解C++的程序流程控制,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • C語言的預(yù)處理介紹

    C語言的預(yù)處理介紹

    大家好,本篇文章主要講的是C語言的預(yù)處理介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++使用模板實(shí)現(xiàn)單鏈表(類外實(shí)現(xiàn))

    C++使用模板實(shí)現(xiàn)單鏈表(類外實(shí)現(xiàn))

    這篇文章主要為大家詳細(xì)介紹了C++使用模板實(shí)現(xiàn)單鏈表的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語言中的各種文件讀寫方法小結(jié)

    C語言中的各種文件讀寫方法小結(jié)

    這篇文章主要介紹了C語言中的各種文件讀寫方法小結(jié),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-07-07
  • C語言程序環(huán)境和預(yù)處理詳解分析

    C語言程序環(huán)境和預(yù)處理詳解分析

    大家有沒有想過,在vs2019的編譯器上只要按下Ctrl+F5,一個(gè)test.c的源程序就能變成一個(gè).exe的可執(zhí)行程序,這其中是如何通過編譯產(chǎn)生的呢,本章就和大家一起把其中的知識(shí)和重點(diǎn)的預(yù)處理一起學(xué)習(xí)一下
    2022-03-03
  • C語言實(shí)現(xiàn)Fibonacci數(shù)列遞歸

    C語言實(shí)現(xiàn)Fibonacci數(shù)列遞歸

    這篇文章主要介紹了C語言實(shí)現(xiàn)Fibonacci數(shù)列遞歸,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ LeetCode1812判斷國際象棋棋盤格子顏色

    C++ LeetCode1812判斷國際象棋棋盤格子顏色

    這篇文章主要為大家介紹了C++ LeetCode1812判斷國際象棋棋盤格子顏色, 有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解C++ sizeof(上)

    詳解C++ sizeof(上)

    這篇文章主要介紹了C++ sizeof的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言?超詳細(xì)順序表的模擬實(shí)現(xiàn)實(shí)例建議收藏

    C語言?超詳細(xì)順序表的模擬實(shí)現(xiàn)實(shí)例建議收藏

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示
    2022-03-03

最新評(píng)論

南阳市| 百色市| 枣阳市| 和顺县| 界首市| 同心县| 西宁市| 富顺县| 泗阳县| 林州市| 隆尧县| 灵璧县| 咸宁市| 原平市| 宁津县| 百色市| 清丰县| 恩平市| 昭通市| 剑川县| 房产| 留坝县| 普格县| 轮台县| 临泽县| 内丘县| 宜宾县| 冷水江市| 晴隆县| 奉贤区| 阜平县| 那曲县| 西安市| 红安县| 永昌县| 聂荣县| 保德县| 瓮安县| 汾西县| 陇南市| 武陟县|