C++的引用和指針使用

前言

身為一個初學者,不是說引用和指針難學,而是他們定義和使用的方式非常令人迷惑,定義和使用,該用&還是不該用&, 該用*還是不該用*,這是一個讓我非常迷惑的事情。所以專門寫了測試方法來進行測試,看看到底怎么使用。

引用

通常定義一個引用,就要使用到 & 符號。這個東西的意義非常多,很容易就弄混了。為此專門寫了個測試,來說明這些符號到底有什么用,怎么用的。

int v = 10;
int &vv = v;
std::cout << "vv:"<< vv << std::endl;
std::cout << "&vv:" << &vv << std::endl;
std::cout << "&v:" << &v << std::endl;

輸出是:

vv:10
&vv:0x7fff5704e9fc
&v:0x7fff5704e9fc

v是一個int值,&在一般的情況下,表示一個取地址的操作。剛學習C++,很容易把所有的&都想成是取地址,這樣在&表示一個引用的時候,就會有很大的問題。在定義一個引用的時候,&就表示引用,沒有別的含義。如果你把&當成是一個取地址,你就會陷入模糊。int &vv = v 就會被誤解,取vv的地址是v?v在這里是10,vv的地址是10?這明顯是錯誤的。這個時候,&就僅僅表示引用的定義,沒有其他的含義了。當用的時候,就直接使用 vv 就好了。vv就直接表示v,而&vv則表示vv指向的地址。可以看到,&vv和&v打印的地址相同。

使用引用
vv = 20;    
std::cout << "vv:" << vv << std::endl; 
std::cout << "&vv:" << &vv << std::endl;   
std::cout << "v:" << v << std::endl;

輸出為:

vv:20
&vv:0x7fff5704e9fc
v:20

可以看到,直接使用vv就可以直接賦值了。如果使用:

&vv=20;    //這樣使用就會出錯,直接把20當地址賦值,是錯誤的。

指針

*一般的意思就是取出地址對應的值。先看代碼:

int t = 10;
int *p = &t;
std::cout << "p:" << p << std::endl;
std::cout << "*p:" << *p << std::endl;

輸出為:

p:0x7fff5704ea0c
*p:10

指針定義和賦值就和引用不一樣了。看 int *p = &t這句,右邊&t,表示取到了t的地址,右邊是一個地址,左邊也應該是一個地址了。實質上 int *p 里面,int *才是p的類型,所以被賦值的實質上是p,也就是說p是t的地址。這下就恍然大悟了。

指針使用
*p = 200;
std::cout << "p:" << p << std::endl;
std::cout << "*p:" << *p << std::endl;
std::cout << "t:" << t << std::endl;

輸出為:

p:0x7fff5704ea0c
*p:200
t:200

指針的使用應該比較簡單了,p就是你理解的意思,就是指向了p的地址對應的值,此時p就是t,既然*p賦值了200,則t也被賦值了200。

結語

指針和引用的知識都是很基礎的,經常混淆,為了明白他們,先要弄清楚定義和如何使用,高深的知識我也還不明白,總之,先弄清楚基礎,是沒有錯的~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,470評論 3 44
  • 1.語言中變量的實質 要理解C指針,我認為一定要理解C中“變量”的存儲實質, 所以我就從“變量”這個東西開始講起吧...
    金巴多閱讀 1,804評論 0 9
  • 一.指針 ** 1.指針概念**:指針就是用來保存內存地址的變量。 2.聲明指針的方式:int *p;與運算符*結...
    YBshone閱讀 422評論 0 4
  • 前段時間手機被女大學生怒踹女童事件刷屏,一時評論四起:有人罵該大學生沒教養,有人罵女童母親是潑婦,還有人指責該女童...
    風止了閱讀 821評論 0 1
  • 1.最簡單的乘法 r1 = 12.34 r2 = 9.08 s1 = 3.14 * r1 * r1 print s...
    潘老6閱讀 414評論 0 2