日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 引用通过代码例子理解

發布時間:2025/4/16 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 引用通过代码例子理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 引用可以看作一個已定義變量的別名。
// 引用 #include <iostream> using namespace std;int main(void) {int a = 10; //c編譯器分配4個字節內存, a內存空間的別名int& b = a; //b就是a的別名a = 11; //直接賦值cout << "a=" << a << ",b=" << b << endl;cout << "--------------" << endl;int* p = &a;*p = 12;cout << "a=" << a << ",b=" << b << endl;cout << "--------------" << endl;b = 14;cout << "a=" << a << ",b=" << b << endl;cout << "--------------" << endl;int& c = a; //一個變量可以有多個引用int& r = a;int& r = b; //錯誤,不可更改原有的引?關系float& rr = a; //錯誤,引?類型不匹配 int& ra = r; //可以。對引?更次引?,表? a 變量有兩個別名,分別是 r 和 rareturn 0; }
  • 引用作為函數參數

普通引用在聲明時必須用其它的變量進行初始化,引用作為函數參數聲明時不進行初始化。

// 引用作為函數參數 #include <iostream> using namespace std;struct teacher {int id;char name[64]; };void print1(struct teacher t1) //t1和t是兩個不同變量, {cout << "1,id=" << t1.id << endl;t1.id = 11; //只修改t1,不修改t } void print2(struct teacher * t2) {cout << "2,id=" << t2->id << endl; } void print3(struct teacher& t3) //t3是t的別名,相當于修改了t {cout << "3,id=" << t3.id << endl; }int main(void) {teacher t = { 23,"haha" };print1(t);print2(&t);print3(t);return 0; }
  • 引用的意義
    1)引用作為其它變量的別名而存在,因此在一些場合可以代替指針
    2)引用相對于指針來說具有更好的可讀性和實用性
//void swap(int a, int b); //?法實現兩數據的交換 //void swap(int* p, int* q); //開辟了兩個指針空間實現交換#include <iostream> using namespace std; void swap(int& a, int& b) {int tmp;tmp = a; a = b;b = tmp; } int main() {int a = 3, b = 5;cout << "a=" << a <<" "<< "b=" << b << endl;swap(a, b);cout << "a=" << a << " "<< "b=" << b << endl;return 0; }
  • 引用的本質
    引用所占大小與指針相同
    引用在C++中的內部實現是一個常指針

  • 引用作為函數的返回值和左值

#include <iostream> using namespace std; int getA1() {static int a;a = 11;return a; } int& getA2() {int a;a = 22;return a; //int &temp = a; } int& getA2_static() {static int a;a = 220;return a; } int& getA2_static_interest() {static int a = 220;return a; }int main(void) {int a1 = 0;int a2 = 0;//值拷?a1 = getA1();//將?個引?賦給?個變量,會有拷?動作a2 = getA2(); //a2=temp;//int& a3 = getA2(); //錯誤。我也不是很明白。getA2()中的局部被回收了。由于是棧的引?,內存?法。int& a3 = getA2_static(); //正確。將?個引?賦給另?個引?作為初始值,由于是靜態區域,內存合法int a4 = getA2_static();cout << "a1 = " << a1 << endl;cout << "a2 = " << a2 << endl;cout << "a3 = " << a3 << endl;cout << "a4 = " << a4 << endl;getA2_static() = 100; //函數返回值是?個引?,并且當左值int a5 = getA2_static();cout << "a5 = " << a5 << endl; //????? 修改不成功getA2_static_interest() = 100; //函數返回值是?個引?,并且當左值int a6 = getA2_static_interest();cout << "a6 = " << a6 << endl; //????? 修改成功return 0; }
  • 指針引用
#include <iostream> using namespace std; struct Teacher {char name[64];int age; }; //在被調?函數 獲取資源 int getTeacher(Teacher** p) {Teacher* tmp = NULL;if (p == NULL){return -1;}tmp = (Teacher*)malloc(sizeof(Teacher));if (tmp == NULL){return -2;}tmp->age = 33;// p是實參的地址 *實參的地址 去間接的修改實參的值*p = tmp;return 0; } //指針的引? 做函數參數 int getTeacher2(Teacher*& myp) {//給myp賦值 相當于給main函數中的pT1賦值myp = (Teacher*)malloc(sizeof(Teacher));if (myp == NULL){return -1;}myp->age = 36;return 0; } void FreeTeacher(Teacher* pT1) {if (pT1 == NULL){return;}free(pT1); } void FreeTeacher2(Teacher*& myp) {if (myp == NULL){return;}free(myp);myp == NULL; }int main(void) {Teacher* pT1 = NULL;//1 c語?中的?級指針getTeacher(&pT1);cout << "age:" << pT1->age << endl;FreeTeacher(pT1);//2 c++中的引? (指針的引?)//引?的本質 間接賦值后2個條件 讓c++編譯器幫我們程序員做了。getTeacher2(pT1);cout << "age:" << pT1->age << endl;FreeTeacher(pT1);return 0; }
  • const引用
    const 引用的目的是,禁止通過修改引用值來改變被引用的對象。
    const 引用有較多使用。它可以防止對象的值被隨意修改。因而具有一
    些特性。
    1、const 對象的引用必須是 const 的,將普通引用綁定到 const 對象是不
    合法的。 這個原因比較簡單。既然對象是 const 的,表示不能被修改,引用當然
    也不 能修改,必須使用 const 引用。實際上,
    const int a=1;
    int &b=a;
    這種寫法是不合法 的,編譯不過。
    2、const 引用可使用相關類型的對象(常量,非同類型的變量或表達式)初
    始化。 這個是 const 引用與普通引用最大的區別。
    const int &a=2;
    是合法的。
    double x=3.14;
    const int &b=a;
    也是合法的。
#include <iostream> using namespace std; int main(void) { //普通引?int a = 10; int &b = a; cout << "b = " << b << endl; //常引?int x=20; const int &y = x; //常引?是限制變量為只讀 不能通過y去修改x了//y =21; //errorreturn 0; }

總結

以上是生活随笔為你收集整理的C++ 引用通过代码例子理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。