C++之&與*符號(hào)用法案例詳解
C++ 之 & 和 *
1.基本概念與二者區(qū)別
指針是一塊內(nèi)存的地址值,而引用是一塊內(nèi)存的別名。
從概念上講。指針從本質(zhì)上講就是存放變量地址的一個(gè)變量,在邏輯上是獨(dú)立的,它可以被改變,包括其所指向的地址的改變和其指向的地址中所存放的數(shù)據(jù)的改變。
而引用是一個(gè)別名,它在邏輯上不是獨(dú)立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的對(duì)象在其整個(gè)生命周期中是不能被改變的(自始至終只能依附于同一個(gè)變量)。
下面附上一段代碼以便理解抽象的概念:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a = 5, b = 10, c = 15;
int *p1; //指針可以不初始化
int &d = b; //引用必須初始化(相當(dāng)于給一個(gè)人起外號(hào)要針對(duì)那個(gè)人)
p1 = &a; //p1指向a的地址
cout << "a:" << a << endl << "a的地址:" << &a << endl ;
cout << "b:" << b << endl << "b的地址:" << &b << endl;
cout << "c:" << c << endl << "c的地址:" << &c << endl;
cout << "p1(的地址):" << p1 << endl << "p1所指對(duì)象:" << *p1 << endl;
cout << "d:" << d << endl << "d的地址:" << &d << endl;
d = c; //相當(dāng)于b=d=c;
p1 = &c; //p1指向c的地址
cout << endl <<"修改后:" << endl<<endl;
cout << "a:" << a << endl << "a的地址:" << &a << endl;
cout << "b:" << b << endl << "b的地址:" << &b << endl;
cout << "c:" << c << endl << "c的地址:" << &c << endl;
cout << "p1:" << p1 << endl << "p1所指對(duì)象:" << *p1 << endl;
cout << "d:" << d << endl << "d的地址:" << &d << endl;
system("pause");
return 0;
}

從圖中我們可以看出:
d=c并不改變d的地址,且d與b地址相同,
所以引用不能重新綁定并非意味不能 重新賦值,重新賦值只代表引用初始化時(shí)所綁定對(duì)象重新賦值
而指針p1則在指向a的地址后可重新指向c的地址,p1所指對(duì)象也隨之改變。
2.定義時(shí)等號(hào)左右的不同含義
例如
int i=4; int *p=&i;
左側(cè)的*可看做與int一起組成的復(fù)合類型 int *,代表指向?qū)崝?shù)類型的指針
而右側(cè)的&則為取地址符,p指向i的地址。
除了在定義語(yǔ)句中,一般情況下
int a = 5, b = 10; int *p; p = &a; p = &b; //p指向b(取b的地址) *p = 2; //*p相對(duì)于b,即b=2
3.復(fù)合類型的判斷
注意:只有對(duì)指針的引用,沒(méi)有指向引用的指針?。ㄒ?yàn)橐帽旧聿皇菍?duì)象)
一句話原則:從右向左讀,越靠近變量的符號(hào)越說(shuō)明其本質(zhì)
eg:int *&r=p;
&說(shuō)明r的類型是引用,*說(shuō)明 這個(gè)引用 是對(duì)指針的引用。
到此這篇關(guān)于C++之&與*符號(hào)用法案例詳解的文章就介紹到這了,更多相關(guān)C++之&與*符號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析c語(yǔ)言switch中break語(yǔ)句的具體作用
以下是對(duì)c語(yǔ)言switch中break語(yǔ)句的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-07-07
Qt串口通信開發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法
這篇文章主要介紹了Qt串口通信開發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法,需要的朋友可以參考下2020-03-03
C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的SOAP客戶端
這篇文章主要介紹了C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的SOAP客戶端,在C++中,一般使用gSOAP來(lái)實(shí)現(xiàn)客戶端、服務(wù)端,下面一起進(jìn)入文章了解具體內(nèi)容,需要的朋友可以參考一下2021-11-11
C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解單鏈表
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來(lái)存儲(chǔ)數(shù)據(jù)元素的信息,指針域用來(lái)存儲(chǔ)下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請(qǐng)需要的小伙伴參考下面文章內(nèi)容2022-03-03
C語(yǔ)言鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
使用VC6.0對(duì)C語(yǔ)言程序進(jìn)行調(diào)試的基本手段分享
這篇文章主要介紹了用VC6.0開發(fā)c語(yǔ)言程序的時(shí)候調(diào)試代碼的一些小技巧,需要的朋友可以參考下2013-07-07
C/C++?Qt數(shù)據(jù)庫(kù)SqlRelationalTable關(guān)聯(lián)表詳解
這篇文章主要介紹了QT中SqlRelationalTable關(guān)聯(lián)表組件的使用,文中代碼對(duì)我們的學(xué)習(xí)和工作具有一定價(jià)值,感興趣的朋友可以了解一下2021-12-12
C語(yǔ)言實(shí)現(xiàn)字符串轉(zhuǎn)浮點(diǎn)函數(shù)的示例
字符串不僅可以轉(zhuǎn)換為整數(shù),也可以轉(zhuǎn)換為浮點(diǎn)數(shù),本文主要介紹了C語(yǔ)言實(shí)現(xiàn)字符串轉(zhuǎn)浮點(diǎn)函數(shù)的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2022-02-02

