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

C++中的數(shù)組引用和指針引用

 更新時(shí)間:2021年09月03日 15:52:10   作者:Enoch0813  
這篇文章主要介紹了C++中的數(shù)組引用和指針引用詳細(xì)的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容

C++中的數(shù)組引用和指針引用

一、引用的本質(zhì)

我們?cè)谥v解引用之前需要知道為什么C++中會(huì)單獨(dú)提出引用這個(gè)概念,在前面也提到在C++從一定角度上是C語(yǔ)言的升級(jí)版,其實(shí)引用時(shí)和C語(yǔ)言中的指針一樣的功能,并且使得語(yǔ)法更加簡(jiǎn)潔。既然提到和指針功能相同,那么引用的功能其實(shí)就是給空間取別名。

代碼解析:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

void test01()
{
 int a = 10;
 int& b = a;
 b = 100;
 cout << a << endl;
}

void func(int& a)
{
 a = 200;
}

void test02()
{
 int a = 10;
 func(a);
 cout << "a=" << a << endl;
}

int main()
{
 test01();
 test02();
 system("pause");
 return EXIT_SUCCESS;
}

代碼分析:

void test01()
{
 int a = 10;
 int& b = a;
 b = 100;
 cout << a << endl;
}

首先我們定義了一個(gè)整型變量a,并且取值為10。接下里,int& b = a;相當(dāng)于是給a的空間取別名為b,類似于C語(yǔ)言中的指針,新定義了一個(gè)指針變量b,指向了內(nèi)存空間a。這里的&不是取地址符號(hào),在這里是引用標(biāo)志。最終通過(guò)引用b修改內(nèi)存空間a的值為100,并且最終進(jìn)行打印。

最終結(jié)果如下圖:

void func(int& a)
{
 a = 200;
}

void test02()
{
 int a = 10;
 func(a);
 cout << "a=" << a << endl;
}

test01中是直接在一個(gè)函數(shù)里進(jìn)行引用的,我們?cè)趖est02中換一個(gè)引用方式,將引用參數(shù)作為被調(diào)函數(shù)func的形參。最終結(jié)

果如下圖:

總結(jié):

  • 引用的本質(zhì)其實(shí)是編譯器在內(nèi)部使用常指針來(lái)實(shí)現(xiàn)。例如int& b = a;其實(shí)在等價(jià)于int* const b = &a;只不過(guò)該操作是編譯器內(nèi)部進(jìn)行的。所以其實(shí)引用創(chuàng)建時(shí),必須初始化。
  • 引用一旦初始化不能改變它的指向
  • 引用必須引用一塊合法的內(nèi)存空間
  • &不是取地址操作符,是引用的標(biāo)記作用

二、數(shù)組的引用

int main()
{
 int arr[] = { 1, 2, 3, 4, 5 };
 //第一種方法
 typedef int(MY_ARR)[5];
 MY_ARR& arref = arr;

 //第二種方法
 int(&arref2)[5] = arr;

 //第三種方法
 typedef int(&MY_ARR3)[5];
 MY_ARR3 arref3 = arr;

 for (int i = 0; i < 5; i++)
 {
  cout << arref[i] << endl;
 }
 cout << endl;//換行
 for (int i = 0; i < 5; i++)
 {
  arref2[i] = 100 + i;
  cout << arref2[i] << endl;
 }

 system("pause");
 return EXIT_SUCCESS;
}

代碼分析:

首先我們定義了一個(gè)整型數(shù)組為arr,并且數(shù)組大小為5,數(shù)組元素為1,2,3,4,5。
接下來(lái)我們一共有三種數(shù)組的引用方法:
第一種是定義數(shù)組類型, typedef int(MY_ARR)[5]; MY_ARR& arref = arr; 類似于MY_ARRint ,arrefb,arra,相當(dāng)于int &b=a;
第二種是直接定義引用,這種方法是最常用的。int(&arref2)[5] = arr; 相當(dāng)于int &b=a;
第三種是建立引用數(shù)組類型。typedef int(&MY_ARR3)[5]; MY_ARR3 arref3 = arr;這種方法不怎么常用。

最終運(yùn)行結(jié)果如下圖:

三、指針的引用

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

void test01()
{
 char* p2 = (char*)"馨怡";
 char*& p1 = p2;
 cout << p1 << endl;
}
//被調(diào)函數(shù)
void func(char*& tmp)
{
 char* p;
 p = (char*)malloc(64);
 memset(p, 0, 64);
 strcpy(p, "小花");
 tmp = p;//省了*
}
//主調(diào)函數(shù)
void test02()
{
 char* mp = NULL;
 func(mp);//省了&
 cout << mp << endl;
}

int main()
{
 test01();
 test02();
 system("pause");
 return EXIT_SUCCESS;
}

分析代碼:

void test01()
{
 char* p = (char*)"馨怡";
 char*& p1 = p;
 cout << p1 << endl;
}

為了讓大家更清楚的了解,特意附上一張圖

從圖中可以看出,首先我們創(chuàng)建了一個(gè)char * 類型的指針變量p,指向了文字常量區(qū)馨怡所在的內(nèi)存空間,即圖中的0x1234,那么經(jīng)過(guò)指針的調(diào)用,即重新定義了一個(gè)指針變量p1也指向了內(nèi)存空間0x1234,即給p取別名p1。

最終結(jié)果如下圖:

//被調(diào)函數(shù)
void func(char*& tmp)
{
 char* p;
 p = (char*)malloc(64);
 memset(p, 0, 64);
 strcpy(p, "小花");
 tmp = p;//省了*
}
//主調(diào)函數(shù)
void test02()
{
 char* mp = NULL;
 func(mp);//省了&
 cout << mp << endl;
}

 為了讓大家更了解,特意附上一張圖

從上圖可以看出,我們首先定義了一個(gè)局部指針變量mp指向了NULL,并且存在于棧區(qū)。然后開始調(diào)用被調(diào)函數(shù)funcmp作為func的形參,等價(jià)于char* &tmp = mp; 相當(dāng)于給mp取別名為tmp。在func函數(shù)中創(chuàng)建了一個(gè)新的指針變量p,用于指向新申請(qǐng)的malloc內(nèi)存,大小為64個(gè)字節(jié),并且調(diào)用memsetstrcpy函數(shù)將堆區(qū)中的空間賦值為“小花”。最終將變量p指向重新指向?yàn)?code>tmp指向,即最終mp從原來(lái)的NULL指向了堆區(qū)中的小花,即內(nèi)存地址為0x1

最終結(jié)果如下所示:

以上就是C++中的數(shù)組引用和指針引用的詳細(xì)內(nèi)容,更多關(guān)于C++數(shù)組引用和指針引用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的12306火車售票系統(tǒng)

    基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的12306火車售票系統(tǒng)

    火車售票系統(tǒng)給我們的出行帶來(lái)了極大的方面,那么他基于編程是如何實(shí)現(xiàn)的呢?今天小編抽時(shí)間給大家分享一個(gè)使用C語(yǔ)言寫的一個(gè)簡(jiǎn)單的火車票系統(tǒng),感興趣的朋友參考下
    2016-09-09
  • 嵌入式C語(yǔ)言查表法在項(xiàng)目中的應(yīng)用

    嵌入式C語(yǔ)言查表法在項(xiàng)目中的應(yīng)用

    今天小編就為大家分享一篇關(guān)于嵌入式C語(yǔ)言查表法在項(xiàng)目中的應(yīng)用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C語(yǔ)言自定義實(shí)現(xiàn)strlen函數(shù)的3種方法總結(jié)

    C語(yǔ)言自定義實(shí)現(xiàn)strlen函數(shù)的3種方法總結(jié)

    這篇文章帶大家了解C語(yǔ)言中自定義實(shí)現(xiàn)strlen函數(shù)的3種方法,計(jì)數(shù)器,遞歸以及指針,這三種方法通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 深入理解C++中的vector類的用法及特性

    深入理解C++中的vector類的用法及特性

    vector直接翻譯過(guò)來(lái)為向量,在C++中為封裝動(dòng)態(tài)數(shù)組的容器,且有序,需要的朋友可以參考下
    2016-05-05
  • 構(gòu)造函數(shù)定義為private或者protected的好處

    構(gòu)造函數(shù)定義為private或者protected的好處

    從語(yǔ)法上來(lái)講,一個(gè)函數(shù)被聲明為protected或者private,那么這個(gè)函數(shù)就不能從“外部”直接被調(diào)用了。對(duì)于protected的函數(shù),子類的“內(nèi)部”的其他函數(shù)可以調(diào)用之。而對(duì)于private的函數(shù),只能被本類“內(nèi)部”的其他函數(shù)說(shuō)調(diào)用
    2013-10-10
  • C語(yǔ)言 fscanf 和 fprintf函數(shù)示例詳解

    C語(yǔ)言 fscanf 和 fprintf函數(shù)示例詳解

    這篇文章主要介紹了 C語(yǔ)言 fscanf 和 fprintf函數(shù)示例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • 詳解C語(yǔ)言之緩沖區(qū)溢出

    詳解C語(yǔ)言之緩沖區(qū)溢出

    緩沖區(qū)是一塊連續(xù)的計(jì)算機(jī)內(nèi)存區(qū)域,可保存相同數(shù)據(jù)類型的多個(gè)實(shí)例。緩沖區(qū)可以是堆棧、堆和靜態(tài)數(shù)據(jù)區(qū)。在C/C++語(yǔ)言中,通常使用字符數(shù)組和malloc/new實(shí)現(xiàn)緩沖區(qū)。溢出指數(shù)據(jù)被添加到分配給該緩沖區(qū)的內(nèi)存塊之外。緩沖區(qū)溢出是最常見的程序缺陷
    2021-06-06
  • C語(yǔ)言中可變參數(shù)的使用方法示例

    C語(yǔ)言中可變參數(shù)的使用方法示例

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中可變參數(shù)的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C/C++?活動(dòng)預(yù)處理器詳解

    C/C++?活動(dòng)預(yù)處理器詳解

    預(yù)處理器是一些指令,指示編譯器在實(shí)際編譯之前所需完成的預(yù)處理,預(yù)處理的作用就是在代碼被編譯前對(duì)代碼做某些替換,這篇文章主要介紹了C/C++?活動(dòng)預(yù)處理器,需要的朋友可以參考下
    2022-11-11
  • C語(yǔ)言課程設(shè)計(jì)之抽獎(jiǎng)系統(tǒng)

    C語(yǔ)言課程設(shè)計(jì)之抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言課程設(shè)計(jì)之抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評(píng)論

城固县| 进贤县| 大厂| 遂川县| 会同县| 琼结县| 枞阳县| 文水县| 墨玉县| 大荔县| 雷山县| 福鼎市| 右玉县| 柞水县| 若尔盖县| 民县| 巩留县| 阳新县| 台南县| 利辛县| 平南县| 独山县| 若羌县| 如东县| 河源市| 吉木萨尔县| 若羌县| 武冈市| 万源市| 五家渠市| 景泰县| 奈曼旗| 武川县| 日喀则市| 房产| 建德市| 乌拉特中旗| 肃南| 崇明县| 营口市| 称多县|