欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、引用的本質(zhì)

我們在講解引用之前需要知道為什么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;相當(dāng)于是給a的空間取別名為b,類似于C語言中的指針,新定義了一個指針變量b,指向了內(nèi)存空間a。這里的&不是取地址符號,在這里是引用標(biāo)志。最終通過引用b修改內(nèi)存空間a的值為100,并且最終進行打印。

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

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

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

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

果如下圖:

總結(jié):

  • 引用的本質(zhì)其實是編譯器在內(nèi)部使用常指針來實現(xiàn)。例如int& b = a;其實在等價于int* const b = &a;只不過該操作是編譯器內(nèi)部進行的。所以其實引用創(chuàng)建時,必須初始化。
  • 引用一旦初始化不能改變它的指向
  • 引用必須引用一塊合法的內(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;
}

代碼分析:

首先我們定義了一個整型數(shù)組為arr,并且數(shù)組大小為5,數(shù)組元素為1,2,3,4,5。
接下來我們一共有三種數(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;這種方法不怎么常用。

最終運行結(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)建了一個char * 類型的指針變量p,指向了文字常量區(qū)馨怡所在的內(nèi)存空間,即圖中的0x1234,那么經(jīng)過指針的調(diào)用,即重新定義了一個指針變量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;
}

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

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

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

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

相關(guān)文章

  • 如何查看進程實際的內(nèi)存占用情況詳解

    如何查看進程實際的內(nèi)存占用情況詳解

    本篇文章是對如何查看進程實際的內(nèi)存占用情況進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 總結(jié)了24個C++的大坑,你能躲過幾個

    總結(jié)了24個C++的大坑,你能躲過幾個

    這篇文章主要介紹了總結(jié)了24個C++的大坑,你能躲過幾個,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-05-05
  • C++中new的用法及說明

    C++中new的用法及說明

    這篇文章主要介紹了C++中new的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++ 實現(xiàn)LRU 與 LFU 的緩存算法

    C++ 實現(xiàn)LRU 與 LFU 的緩存算法

    設(shè)計和實現(xiàn)一個LRU 緩存機制。其支持獲取數(shù)據(jù) get 和 寫入數(shù)據(jù) put,設(shè)計并實現(xiàn)最少訪問頻率(LFU)緩存的數(shù)據(jù)結(jié)構(gòu)。LFU的每個數(shù)據(jù)塊都有一個引用計數(shù),所有數(shù)據(jù)塊按照引用計數(shù)排序,具有相同引用計數(shù)的數(shù)據(jù)塊則按照時間進行排序。其支持get 和 put,具體了解請看下文
    2021-09-09
  • QT中QTableWidget加載大量數(shù)據(jù)不卡頓的解決

    QT中QTableWidget加載大量數(shù)據(jù)不卡頓的解決

    本文主要介紹了QT中QTableWidget加載大量數(shù)據(jù)不卡頓的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C++核心編程之內(nèi)存分區(qū)詳解

    C++核心編程之內(nèi)存分區(qū)詳解

    這篇文章主要為大家詳細介紹了C++核心編程之內(nèi)存分區(qū),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C 語言結(jié)構(gòu)體的使用方法

    C 語言結(jié)構(gòu)體的使用方法

    這篇文章主要介紹了C 語言結(jié)構(gòu)體的使用,文章介紹了結(jié)構(gòu)體定義的多種類型,想具體了解的朋友請看下面文章的內(nèi)容
    2021-09-09
  • VC++ 6.0 C語言實現(xiàn)俄羅斯方塊詳細教程

    VC++ 6.0 C語言實現(xiàn)俄羅斯方塊詳細教程

    這篇文章主要為大家介紹了VC++ 6.0 C語言實現(xiàn)俄羅斯方塊詳細教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • OpenCV圖像處理之圖像拼接詳解

    OpenCV圖像處理之圖像拼接詳解

    本文主要介紹了如何使用C++?OpenCV實現(xiàn)圖像景拼接,文中的示例代碼講解詳細,對我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以了解一下
    2022-08-08
  • C++ vector類的模擬實現(xiàn)方法

    C++ vector類的模擬實現(xiàn)方法

    這篇文章主要介紹了C++ vector類的模擬實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論