C++---引用的理解--入門

1.引用的特性

引用是C++對C的增強,C裏面是沒有引用

1.引用基礎

#include <iostream>
using namespace std;


int main() {
	int a = 20, b = 30;

	int& c = b;			// c是初始化爲b的引用

	cout << "a=" << a << ", a的地址:" << &a << endl;
	cout << "b=" << b << ", b的地址:" << &b << endl;
	cout << "c=" << c << ", c的地址:" << &c << endl;

	return 0;
}

// 如上結果爲:

a=20, a的地址:0093FCBC
b=30, b的地址:0093FCB0		# b的地址和c的地址一樣,說明存儲在堆內存的地址是一樣的
c=30, c的地址:0093FCB0

在這裏插入圖片描述

  • 引用的原理,如上圖所示,如果還不清楚,可以理解爲b和c是一個人的2個不同的名字
  • 底層原理如果不理解,下面的知識比較困難了,我的另一篇博文都爲你準備好了:(是不是很貼心)https://blog.csdn.net/chenmozhe22/article/details/106099565

2.引用的特性:初始化後不能再修改了

  • 情況一:正常賦值
#include <iostream>
using namespace std;


int main() {
	int a = 20, b = 30;

	int& c = b;

	cout << "a=" << a << ", a的地址:" << &a << endl;
	cout << "b=" << b << ", b的地址:" << &b << endl;
	cout << "c=" << c << ", c的地址:" << &c << endl;

	c = 50;
	cout << "a=" << a << ", a的地址:" << &a << endl;
	cout << "b=" << b << ", b的地址:" << &b << endl;
	cout << "c=" << c << ", c的地址:" << &c << endl;

	return 0;
}

a=20, a的地址:010FFB1C
b=30, b的地址:010FFB10
c=30, c的地址:010FFB10
a=20, a的地址:010FFB1C	
b=50, b的地址:010FFB10		#  b和c的地址,在修改c的參數前後,沒有變動	
c=50, c的地址:010FFB10

  • 再看情況二:再次初始化引用
    在這裏插入圖片描述

如上兩個案例說明:我們不能對引用多次初始化,只能賦值。而一旦初始化之後,引用對應的地址,雖然值可能改變,但地址就一直改變不了了。

3.引用的特性:其他

  • 引用不支持空引用(錯誤用法)
	int& c;		//在初始化的時候,就必須設定引用的變量
	c = 20;
  • 應用必須是變量,不能是常量(錯誤用法)

int & d = 30;

  • 引用只能是一級,不能多級(錯誤用法)

	int c = 30;
	int&& d = c;

  • 引用的自增不能是後自增(錯誤用法)
	int c = 30;
	int& d = c;
	cout << d++ << endl;	//後自增打印的結果還是30

在C/C++中,前自增和後自增不一樣的,這個可以查閱左值和右值相關的知識

2.函數中傳遞參數的方式—引用傳遞

#include <iostream>
using namespace std;

void swap(int& a, int& b);

int main() {
	int a = 3, b = 4;
	cout << "a=" << a << ", b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << ", b=" << b << endl;
	system("pause");
	return 0;
}

void swap(int& x, int& y) {
	int t = x;
	x = y;
	y = t;
}


// 結果如下:
a=3, b=4
a=4, b=3

  • swap函數的作用,其實是把兩個元素的引用調換了,最終2個元素所指向的內存地址也就調換了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章