本文主要說(shuō)一說(shuō)在C++中的指針苇羡、地址沧烈、引用等。適用于小白菜鳥(niǎo)卜朗。
指針與地址
首先來(lái)了解指針與地址抹锄,參見(jiàn)如下代碼:
int main() {
int num = 7;
int *p = #
cout << num << "-" << p << "-" << *p << endl;
num = 8;
cout << num << "-" << p << "-" << *p << endl;
*p = 9;
cout << num << "-" << p << "-" << *p << endl;
int a = 11;
p = &a;
cout << num << "-" << p << "-" << *p << endl;
return 0;
}
上面的代碼輸出為:
7-0x61fe44-7
8-0x61fe44-8
9-0x61fe44-9
9-0x61fe40-11
第一行定義整形變量num=7颓影,第二行將num變量的地址(&num)賦值給指針p(*p).
此處不可直接用p接收&num赁炎,也不能*p接收num擎场÷饔可以這樣理解:&是對(duì)地址的封箱——返回的是地址父叙,*表示我要指向這個(gè)地址。
接下來(lái)是對(duì)num和p的賦值肴裙,在給指針賦值時(shí)趾唱,需要使用*p,解析引用p對(duì)其地址上所存的值進(jìn)行賦值蜻懦,稱為解引用甜癞。
小結(jié)一下:&num表示返回地址,*p表示:1)指針p阻肩;2)解引用.
引用
引用的示例代碼如下:
int main() {
int num = 7;
int &q = num;
cout << num << "-" << q << "-" << &q << endl;
q = 8;
cout << num << "-" << q << "-" << &q << endl;
return 0;
}
輸出結(jié)果:
7-7-0x61fe44
8-8-0x61fe44
從上面的指針與地址部分带欢,我們了解到&num返回的是num的地址运授。在本例中&q表示q的地址,將num賦值給&q乔煞,表示將num的地址賦值給q吁朦。則此時(shí)num和q指向同一個(gè)地址。注意:此處不牽扯任何指針的知識(shí)渡贾。此時(shí)給q賦值8逗宜,則num也會(huì)跟著變。
指針的指針
int main() {
int val = 7;
int *p = &val;//val的地址賦值給指針p空骚,即指針p指向val的地址
int *q = p;//指針p賦值給指針q
int **p2 = &p;//**聲明一個(gè)指向指針的指針
cout << *p << "-" << **p2 << "-" << *q << endl;
return 0;
}
輸出:
7-7-7
總結(jié)
- *符號(hào) 一定 是在左邊纺讲;
- 帶*初始化的變量,右邊可以是以下情況:
- 右邊為單變量名時(shí)囤屹,該變量表示指針熬甚;
- 右邊為&變量名時(shí),表示將右邊變量名的地址給左邊肋坚;
- 右邊一定不能是直接的new對(duì)象或者數(shù)字等直接的值乡括。
- 帶&初始化的變量,右邊只能是
基本引用
智厌。即不含指針诲泌,也不能是直接的new對(duì)象或者數(shù)字等直接的值。
如有不對(duì)铣鹏,歡迎指正敷扫!