07.04 c++之引用詳解

引用:

int&r =i和 int r=i;不同之處內存分配

#include<iostream>

#include<vector>

using namespace std;

int main(void) {

int i;

int &r = i;//創建i的引用,也稱為i的別名

i = 5;

cout << i << endl;5

cout << r << endl;5

cout << &i << endl;

cout << &r << endl;

int x;

x = 6;

int y = x;

cout << x << " " << y << endl;

cout << &x << endl;

cout << &y << endl;

system("pause");

return 0;

}// 引用就是變量的別名,如r就是變量i的別名,他們的地址是一樣的,被分配到同一個內存中。而y=x就是賦值,他們在不同內存地址中。

int rat = 10;

int &rodents;//聲明一個引用,但未開始就初始化

rodents = rat;

//引用在創建時初始化,這個引用一直指向變量i,地址始終一致。當給引用賦值時,也只是大小值該改變了,但實際上地址並未改變。

int i;

int &r = i;//創建i的引用,也稱為i的別名

i = 5;

cout << i << endl;

cout << r << endl;

cout << &i << endl;

cout << &r << endl;

int x = 50;

r = x;

cout << x << " " << i << " " << r << endl;

cout << &x << endl;

cout << &i << endl;

cout << &r << endl;

//引用作為參數

#include <iostream>

using namespace std;

void swap(int& x, int& y);

int main ()

{

int a = 100;

int b = 200;

cout << "交換前,a 的值:" << a << endl;

cout << "交換前,b 的值:" << b << endl;

/* 調用函數來交換值 */

swap(a, b);

cout << "交換後,a 的值:" << a << endl;

cout << "交換後,b 的值:" << b << endl;

return 0;

}

// 函數定義

void swap(int& x, int& y)

{

int temp;

temp = x; /* 保存地址 x 的值 */

x = y; /* 把 y 賦值給 x */

y = temp; /* 把 x 賦值給 y */

return;

}

引用當成返回值:

#include <iostream>

using namespace std;

double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};

double& setValues( int i )

{

return vals[i]; // 返回第 i 個元素的引用

}

// 要調用上面定義函數的主函數

int main ()

{

cout << "改變前的值" << endl;

for ( int i = 0; i < 5; i++ )

{

cout << "vals[" << i << "] = ";

cout << vals[i] << endl;

}

setValues(1) = 20.23; // 改變第 2 個元素

setValues(3) = 70.8; // 改變第 4 個元素

cout << "改變後的值" << endl;

for ( int i = 0; i < 5; i++ )

{

cout << "vals[" << i << "] = ";

cout << vals[i] << endl;

}

return 0;

}

//引用函數,返回值不能為局部變量,但可以為靜態變量

int& func() {

int q;

//! return q; // 在編譯時發生錯誤

static int x;

return x; // 安全,x 在函數作用域外依然是有效的

}


分享到:


相關文章: