c++ 引用 日期&時間


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

 

引用 

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

 

一、引用和指針的不同

  • 不存在空引用。引用必須連接到一塊合法的內存。
  • 一旦引用被初始化為一個對象,就不能被指向到另一個對象。指針可以在任何時候指向到另一個對象。
  • 引用必須在創建時被初始化。指針可以在任何時間被初始化。

 

二、創建引用

變量名稱是變量附屬在內存位置中的標簽,可以把引用當成是變量附屬在內存位置中的第二個標簽。因此,可以通過原始變量名稱或引用來訪問變量的內容

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

 

 

 

三、引用通常用於函數參數列表函數返回值

 (1)把引用作為參數

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

#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

 

 以引用作為參數的函數,可以把變量傳入,但不能傳入常量。

#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++ 函數可以返回一個引用,方式與返回一個指針類似。

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

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

 

 結果:

改變前的值
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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM