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

C++中的數組引用和指針引用

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

C++中的數組引用和指針引用

一、引用的本質

我們在講解引用之前需要知道為什么C++中會單獨提出引用這個概念,在前面也提到在C++從一定角度上是C語言的升級版,其實引用時和C語言中的指針一樣的功能,并且使得語法更加簡潔。既然提到和指針功能相同,那么引用的功能其實就是給空間取別名。

代碼解析:

#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;
}

首先我們定義了一個整型變量a,并且取值為10。接下里,int& b = a;相當于是給a的空間取別名為b,類似于C語言中的指針,新定義了一個指針變量b,指向了內存空間a。這里的&不是取地址符號,在這里是引用標志。最終通過引用b修改內存空間a的值為100,并且最終進行打印。

最終結果如下圖:

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

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

test01中是直接在一個函數里進行引用的,我們在test02中換一個引用方式,將引用參數作為被調函數func的形參。最終結

果如下圖:

總結:

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

二、數組的引用

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;
}

代碼分析:

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

最終運行結果如下圖:

三、指針的引用

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

void test01()
{
 char* p2 = (char*)"馨怡";
 char*& p1 = p2;
 cout << p1 << endl;
}
//被調函數
void func(char*& tmp)
{
 char* p;
 p = (char*)malloc(64);
 memset(p, 0, 64);
 strcpy(p, "小花");
 tmp = p;//省了*
}
//主調函數
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)建了一個char * 類型的指針變量p,指向了文字常量區(qū)馨怡所在的內存空間,即圖中的0x1234,那么經過指針的調用,即重新定義了一個指針變量p1也指向了內存空間0x1234,即給p取別名p1。

最終結果如下圖:

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

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

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

最終結果如下所示:

以上就是C++中的數組引用和指針引用的詳細內容,更多關于C++數組引用和指針引用的資料請關注腳本之家其它相關文章!希望大家以后多多支持腳本之家!

相關文章

  • 基于C語言實現簡單的12306火車售票系統(tǒng)

    基于C語言實現簡單的12306火車售票系統(tǒng)

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

    嵌入式C語言查表法在項目中的應用

    今天小編就為大家分享一篇關于嵌入式C語言查表法在項目中的應用,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言自定義實現strlen函數的3種方法總結

    C語言自定義實現strlen函數的3種方法總結

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

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

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

    構造函數定義為private或者protected的好處

    從語法上來講,一個函數被聲明為protected或者private,那么這個函數就不能從“外部”直接被調用了。對于protected的函數,子類的“內部”的其他函數可以調用之。而對于private的函數,只能被本類“內部”的其他函數說調用
    2013-10-10
  • C語言 fscanf 和 fprintf函數示例詳解

    C語言 fscanf 和 fprintf函數示例詳解

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

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

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

    C語言中可變參數的使用方法示例

    這篇文章主要給大家介紹了關于C語言中可變參數的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C/C++?活動預處理器詳解

    C/C++?活動預處理器詳解

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

    C語言課程設計之抽獎系統(tǒng)

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

最新評論

吉木乃县| 荣成市| 柞水县| 文山县| 旌德县| 江安县| 喀喇沁旗| 大埔县| 永德县| 通海县| 都江堰市| 张家港市| 广饶县| 霍山县| 内乡县| 静海县| 曲水县| 奉节县| 庆元县| 华容县| 大足县| 余姚市| 陇南市| 应城市| 建昌县| 施秉县| 苏尼特右旗| 仁布县| 辽宁省| 独山县| 秦皇岛市| 蒙自县| 宝山区| 营山县| 运城市| 万源市| 秀山| 华安县| 垫江县| 崇左市| 平利县|