學c語言的時候,指標一直是乙個讓人頭大的東西,懂,但是不會用,還好現在慢慢會了,還好c++的指標還是跟c基本相同,還好如此我就只用記一些不同的東西了:)
一、無名變數(動態變數)
可以用new來建立乙個無名變數,這種變數沒有識別符號,如:
int *p =newint;
可以在動態建立的同時指定初始化列表,如:
double *pdouble;pdouble = new double(26.7);
之後這個變數就通過指標來間接訪問,如:
cin>>*p;cout<<*p;
int c = *p+13;
......
一般情況下,稱使用new運算子建立的變數為動態變數,因為這些變數要在程式執行期間動態建立和銷毀。
動態建立的變數要動態銷毀,用delete關鍵字,如:
deletep;
醬紫就刪除了指標p指向的無名空間。
接下來,誰來告訴我這玩意有什麼用?
二、const修飾指標
由前面的學習可以知道,const關鍵字可定義常量,如
const int a=10;
是不能改變的。當const修飾指標,也是不能改的意思,不過他倆結合會有新的火花:
①指向常量的指標
若把const放在宣告變數的最左邊,如:
1int i=0;2
intj;
3const
int *p = &i;
4 *p = 3; //
錯誤!不能通過p修改所指內容
5 i=2; //
可以6 p=&j;
可以發現,醬,不能再通過p修改所指內容,僅此而已,p所指的東西可以通過別的途徑更改,p的指向也可以改。
②指標常量
1int * const p = &i;
2 p=&j; //
錯誤,指標不能修改指向
3 *p=2; //
可以
如果要指標指向固定,且不能通過該指標修改所指值,則這樣:
const int * const p = &i;
三、引用
引用就是給乙個變數取個別名,如:
inta;int &b = a;
相當於a有了另乙個名字b,只是另乙個名字,系統並沒有分配另外乙個空間給b。用引用可以減少空間消耗。
需要注意的有:引用宣告時必須指定對哪個變數引用,即必須初始化;別名不能再被引用;不能建立陣列的引用,因為陣列是元素的集合。
下面用大篇幅來說說引用的應用:
①引用作為函式引數
1//引用作為函式引數的引用傳遞方式
2 #include3
using
namespace
std;
4void fun1(int);5
void fun2(int&);67
intmain()820
21void fun1(int
x)22
2728
void fun2(int&x)
29
執行結果如下:
0x68fe90
在fun1函式內部x=10
主調函式中a=2
0x68feec
在fun2函式內部x=10
主調函式中a=10
可以發現,fun1沒有用引用傳遞,fun1中定義的區域性變數x的位址與實參不同,改變形參的值當然也無法對實參a起到作用。而在fun2中,x並不是新定義的區域性變數,而是對實參a的引用,所以fun2中的x就是a,位址也相同,那麼對引用量x進行變化,實參當然受影響。
總結一下引用傳遞的優點或者特點:
②常引用
如:
const int &b=a;
這樣就不能通過引用對值進行變更了,更加安全咯~據說能使用const的情況下盡量使用const,雖然我現在還不能完全理解這樣做的苦衷。
③引用作為返回值
要用引用作為返回值型別時,函式得這麼定義,如:
int &fun(形參列表)
相信用起來沒有什麼問題吧!~
但是要注意的是:不能返回區域性變數的引用,因為區域性變數被滅的,引用就會「無所指」,程式會進入位置狀態;);也不能引用new定義的動態變數;可以返回類成員的引用,但最好用const。
之後再繼續學吧,好暈啊@~@!
四、動態陣列
原來之前學的動態變數 new/delete 語句是用在這裡啊!申請動態陣列如下:
資料型別 * p = new 資料型別[n];//其中n可以為變數
deletep;
特別注意刪除語句的形式:p!要加方括號在指標前面。
學到這個,突然回憶起了在c語言的malloc/free函式,c++也是有這個函式的。所以new/delete和malloc/free有什麼不同呢
真是深刻感受到知識都**於生活,小東西也要注意,說不定哪天就派上了大用場。。。不過,不同點第一條(操作物件不同)現在還看不懂。
五、其他指標複習
①函式指標
指向函式的指標。形如:
int (*p)(int,int,int);p=max;
這樣,p就指向max了。圓括號不能少!
②指向指標的指標
指的物件還是指標。
int *p=&x;int **p=&p;
③指標陣列
陣列元素為指標型別的資料。
int *p[5];
p.s. int *p[5] 和 int (*p)[5] 辨析
前者,p優先與結合,所以p是乙個指標,指向乙個有五個資料的陣列。
後者是指標陣列,陣列元素為指標。
陣列中舉結了@~@
C C 程式設計04(指標和引用 遞迴)
第七章 指標和引用 遞迴 1.指標和引用的而區別 首先1,指標是非空性,而引用總是指向某些物件 必須宣告時初始化 不存在指向空值的引用。其次2,合法性,指標總是在使用前測試是否為空指標,引用不用測試。再次3,可修改,指標可以重新賦予新的位址指向不同物件,而引用則始終指向初始化時指定的物件,但是指定物...
5 指標 引用的區別
函式傳值的三種方式 傳值 傳引用 傳指標 相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體 在棧空間有自己的記憶體空間 而引用僅是個別名 不佔記憶體空間 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次...
7 4 指標和引用
7.4.1指標的好處 1.可以動態分配記憶體。2.對多個相似變數進行一般訪問。3.為動態資料結構,尤其是樹和鍊錶提供支援 4.遍歷陣列,解析字串。5.高效的按引用複製陣列和結構。7.4.2 引用還是指標 1.指標本質是儲存位址的變數,指標則是 從一而終 的別名,且不能為空 2.作為引數傳遞,二者不同...