日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C :為何不建議用string作為函數(shù)參數(shù)

 InfoRich 2019-12-14

前面已經(jīng)寫過(guò)很多關(guān)于C/C++一級(jí)指針的內(nèi)容,一級(jí)指針對(duì)初學(xué)者來(lái)說(shuō)就已經(jīng)比較難以理解了,二級(jí)指針就更加難了,本文借助數(shù)組來(lái)理解二級(jí)指針;那么,下面就讓我們一起來(lái)學(xué)習(xí)一下二級(jí)指針和二維數(shù)組;

兩個(gè)與指針息息相關(guān)的運(yùn)算符

說(shuō)起指針,那么有兩運(yùn)算符兄弟不得不提,取址運(yùn)算符“&”和間接運(yùn)算符 “*”(indirection operator),有時(shí)候這會(huì)被稱為解引用運(yùn)算符;

取址運(yùn)算符“&”:用來(lái)取得其操作數(shù)的地址;

間接運(yùn)算符 “*”:它的操作數(shù)必須是指針類型,用來(lái)取得指針?biāo)赶虻膶?duì)象;

例如:

int a = 100 ;
&a ;

此處&a其實(shí)就是一個(gè)指針了, 它的類型是int類型指針類型(int*類型):

int a = 100 ;
&a ;
int* p = &a;
int* p2 = nullptr ;
p2 = &a ;
int b = 200 ;
*p2 = b ;
cout<<* p;

在C/C++中賦值運(yùn)算符“=”左右兩邊類型必須相同或者存在繼承關(guān)系,p2 = &a ;說(shuō)明,p2就等于對(duì)象a的地址,我們通過(guò)間接運(yùn)算符 “*”或者稱解引用運(yùn)算符更易理解,就能取得p2所存地址上存放的對(duì)象。

此時(shí)若運(yùn)行上述代碼,cout<<* p;輸出的將是200 ;這是因?yàn)閜和p2都存的a的地址,但是*p2 = b將該地址上的對(duì)象的值修改為200了,所以當(dāng)你再用*p去取值得時(shí)候與*p2訪問(wèn)的是同一塊地址;

指針內(nèi)存示意圖

二級(jí)指針

有了一級(jí)指針的基礎(chǔ),指針變量在計(jì)算機(jī)內(nèi)存中其實(shí)存放的是指向的對(duì)象的地址,指針的功能其實(shí)都是通過(guò)取址運(yùn)算符“&”,和間接運(yùn)算符 “*”來(lái)實(shí)現(xiàn)的,指針本身是沒(méi)什么神奇的。所以大家可以對(duì)其少一些敬畏之心。

int a = 100 ;
&a ;
int* p = &a;
int* p2 = nullptr ;
p2 = &a ;
int b = 200 ;
*p2 = b ;
int** p3 = &p2 ;
cout<<** p3;

二級(jí)指針示意圖

二級(jí)指針變量存的其實(shí)就是一級(jí)指針變量在內(nèi)存中的地址。再由解引用運(yùn)算符“*”逐級(jí)剝離,最終取的實(shí)體對(duì)象。

二維數(shù)組與指針

指針與一級(jí)指針的關(guān)系很簡(jiǎn)單:一維數(shù)組,在內(nèi)存上是連續(xù)的,所以找到一個(gè)數(shù)組的所有元素只需要知道該數(shù)組的元素類型和首元素的地址就可以逐一找到所有元素。而數(shù)組名就代表首地址;

一維數(shù)組示意圖

int arr[] = {0,1,2,3,4,5} ;
int* pArr = nullptr ;
pArr = arr;
pArr = &arr[0] ;
cout<<*(pArr+1) ;//通過(guò)指針偏移即能訪問(wèn)后續(xù)元素
cout<<*(arr+1) ;

如上述代碼:pArr = arr;與pArr = &arr[0] ;是一樣的;cout<<*(pArr+1) ;與cout<<*(arr+1) ;是一樣的,arr在此處亦可看成一個(gè)指針變量;

那么,二維數(shù)組就是在一維數(shù)組的縱向上再增加元素:

二維數(shù)組示意圖

上述二維數(shù)組可以看成是由{01,02,03,04,05},{11,12,13,14,15},{21,22,23,24,25}三個(gè)數(shù)組組成。每個(gè)數(shù)組又可以用指針表示,那么二維數(shù)組就是指針組成的數(shù)組,所以用二級(jí)指針表示就是:

int arr[3][5] = {{01,02,03,04,05},
{11,12,13,14,15},
{21,22,23,24,25}} ;
int* pArr1 = arr[0] ; //等價(jià)int* pArr1 = &arr[0][0]
int* pArr2 = arr[1] ; //等價(jià)int* pArr1 = &arr[1][0]
int* pArr3 = arr[2] ; //等價(jià)int* pArr1 = &arr[2][0]
int* arrP[] = {pArr1,pArr2,pArr3};
int** pArr_level2 = arrP ;

每行(橫向?yàn)樾校┦自貫樵撔袛?shù)組的首地址:arr[0],arr[1],arr[2];

由于數(shù)組儲(chǔ)存物理的連續(xù)性,所以可以將二維數(shù)組拉伸看做一維數(shù)組,可以由一級(jí)指針表示,再由指針偏移逐一訪問(wèn)各元素:int arr3[3][5] = {01,02,03,04,05,11,12,13,14,15,21,22,23,24,25} ;

int arr[3][5] = {01,02,03,04,05,11,12,13,14,15,21,22,23,24,25} ;
int* p = nullptr ;
for (p = arr[0]; p < arr[0]+15; p++)
{
cout<<*p<<endl; ;
}

指針數(shù)組

所以二級(jí)指針可以看成是由指針組成的一維數(shù)組

來(lái)源:今日頭條@編程老大叔

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多