c++ 引用 日期&時間

日期時間【點擊進入看吧,沒啥可後期拓展的】

 

引用 

引用變量是一個別名,也就是說,它是某個已存在變量的另外一個名字。一旦把引用初始化爲某個變量,就可使用該引用名稱或變量名稱來指向變量。html

 

1、引用和指針的不一樣

  • 不存在空引用。引用必須鏈接到一塊合法的內存。
  • 一旦引用被初始化爲一個對象,就不能被指向到另外一個對象。指針能夠在任什麼時候候指向到另外一個對象。
  • 引用必須在建立時被初始化。指針能夠在任什麼時候間被初始化。

 

2、建立引用

變量名稱是變量附屬在內存位置中的標籤,能夠把引用當成是變量附屬在內存位置中的第二個標籤。所以,能夠經過原始變量名稱或引用來訪問變量的內容ios

int i = 17; 能夠爲 i 聲明引用變量: int&  r = i; double& s = d;

 

& 讀做引用。所以,第一個聲明能夠讀做 "r 是一個初始化爲 i 的整型引用",第二個聲明能夠讀做 "s 是一個初始化爲 d 的 double 型引用"。下面的實例使用了 int 和 double 引用:安全

#include <iostream>
 
using namespace std; int main () { // 聲明簡單的變量
   int i; double d; // 聲明引用變量
   int&    r = i; double& s = d; i = 5; cout << "Value of i : " << i << endl; cout << "Value of i reference : " << r  << endl; d = 11.7; cout << "Value of d : " << d << endl; cout << "Value of d reference : " << s  << endl; return 0; }

 

結果:函數

Value of i : 5 Value of i reference : 5 Value of d : 11.7 Value of d reference : 11.7

 

 

 

3、引用一般用於函數參數列表函數返回值

 (1)把引用做爲參數

 下面的實例使用了引用來實現引用調用函數spa

#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; }

 

  結果:指針

交換前,a 的值: 100 交換前,b 的值: 200 交換後,a 的值: 200 交換後,b 的值: 100

 

 以引用做爲參數的函數,能夠把變量傳入,但不能傳入常量。code

#include <iostream>
using namespace std; int hls(int& a1, int& a2, int& b1, int& b2) //定義行列式函數
{ int temp; temp=a1*b2-a2*b1; return temp; } int main() { int x1=11; int x2=9; int y1=15; int y2=14;  //定義矩陣
   int result;  //行列式運算結果
   result=hls(x1,x2,y1,y2);   //result=hls(11,9,15,14)會報錯
   cout << result << endl; return 0; }

 

 

 

 (2)把引用做爲返回值

經過使用引用來替代指針,會使 C++ 程序更容易閱讀和維護。C++ 函數能夠返回一個引用,方式與返回一個指針相似。htm

當函數返回一個引用時,則返回一個指向返回值的隱式指針。這樣,函數就能夠放在賦值語句的左邊。對象

#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; }

 

 結果:blog

改變前的值 vals[0] = 10.1 vals[1] = 12.6 vals[2] = 33.1 vals[3] = 24.1 vals[4] = 50 改變後的值 vals[0] = 10.1 vals[1] = 20.23 vals[2] = 33.1 vals[3] = 70.8 vals[4] = 50

 

當返回一個引用時,要注意被引用的對象不能超出做用域。因此返回一個對局部變量的引用是不合法的,可是,能夠返回一個對靜態變量的引用

int& func() { int q; //! return q; // 在編譯時發生錯誤
   static int x; return x;     // 安全,x 在函數做用域外依然是有效的
}

 

 

 

 

 

補充:

1.     int& r = i; 和 int r = i; 不一樣之處應該是內存的分配吧,後者會再開闢一個內存空間 

#include <iostream>
 
using namespace std; int main () { int i; int& r = i; i = 5; cout << "Value of i : " << i << endl; cout << "Value of i reference : " << r  << endl; cout << "Addr of i: " << &i << endl; cout << "Addr of r: " << &r << endl; int x; int y = x; x = 6; cout << "Value of x : " << x << endl; cout << "Value of y : " << y  << endl; cout << "Addr of x: " << &x << endl; cout << "Addr of y: " << &y << endl; return 0; }

 

結果:

Value of i : 5 Value of i reference : 5 Addr of i: 0x7fff59cda988 Addr of r: 0x7fff59cda988 Value of x : 6 Value of y : 32767 Addr of x: 0x7fff59cda97c Addr of y: 0x7fff59cda978

 

 

 

2.

 

 

 3.

相關文章
相關標籤/搜索