中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中數組引用和指針引用的示例分析

發布時間:2021-09-05 19:20:51 來源:億速云 閱讀:124 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關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,并且最終進行打印。

最終結果如下圖:

C++中數組引用和指針引用的示例分析

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

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

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

果如下圖:

C++中數組引用和指針引用的示例分析

總結:

  • 引用的本質其實是編譯器在內部使用常指針來實現。例如int& b = a;其實在等價于int* const b = &a;只不過該操作是編譯器內部進行的。所以其實引用創建時,必須初始化。

  • 引用一旦初始化不能改變它的指向

  • 引用必須引用一塊合法的內存空間

  • &不是取地址操作符,是引用的標記作用

二、數組的引用

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;這種方法不怎么常用。

最終運行結果如下圖:

C++中數組引用和指針引用的示例分析

三、指針的引用

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

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

C++中數組引用和指針引用的示例分析

從圖中可以看出,首先我們創建了一個char * 類型的指針變量p,指向了文字常量區馨怡所在的內存空間,即圖中的0x1234,那么經過指針的調用,即重新定義了一個指針變量p1也指向了內存空間0x1234,即給p取別名p1

最終結果如下圖:

C++中數組引用和指針引用的示例分析

//被調函數
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;
}

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

C++中數組引用和指針引用的示例分析

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

最終結果如下所示:

C++中數組引用和指針引用的示例分析

感謝各位的閱讀!關于“C++中數組引用和指針引用的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

延庆县| 澄城县| 天镇县| 马山县| 榕江县| 东安县| 五大连池市| 图们市| 天台县| 渭南市| 出国| 大方县| 和龙市| 彭山县| 广灵县| 象山县| 青岛市| 微山县| 寻甸| 曲麻莱县| 房产| 称多县| 阆中市| 东乡族自治县| 宝应县| 宝坻区| 安乡县| 临澧县| 沿河| 宾阳县| 望奎县| 玛沁县| 台山市| 盐山县| 宜阳县| 务川| 诸暨市| 江安县| 克拉玛依市| 漳平市| 威宁|