引用:
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 在函數作用域外依然是有效的
}
閱讀更多 專業技術交流 的文章