<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > C/C++二維數組名和二級指針

C/C++二維數組名和二級指針

發(fā)布人:電子禪石 時(shí)間:2023-01-10 來(lái)源:工程師 發(fā)布文章

1. 指針

1.1 一個(gè)指針包含兩方面:a) 地址值;b) 所指向的數據類(lèi)型。


1.2 解引用操作符(dereference operator)會(huì )根據指針當前的地址值,以及所指向的數據類(lèi)型,訪(fǎng)問(wèn)一塊連續的內存空間(大小由指針所指向的數據類(lèi)型決定),將這塊空間的內容轉換成相應的數據類(lèi)型,并返回左值。

有時(shí)候,兩個(gè)指針的值相同,但數據類(lèi)型不同,解引用取到的值也是不同的,例如,


char str[] ={0, 1, 2, 3};       /* 以字符的ASCII碼初始化 */

 

char * pc = &str[0]; /* pc指向str[0],即0 */

 

int * pi = (int *) pc; /* 指針的“值”是個(gè)地址,32位。 */

此時(shí),pc和pi同時(shí)指向str[0],但*pc的值為0(即,ASCII碼值為0的字符);而*pi的值為50462976?;蛟S把它寫(xiě)成十六進(jìn)制會(huì )更容易理解:0x03020100(4個(gè)字節分別為3,2,1,0)。我想你已經(jīng)明白了,指針pi指向的類(lèi)型為int,因此在解引用時(shí),需要訪(fǎng)問(wèn)4個(gè)字節的連續空間,并將其轉換為int返回。



2. 數組

2.1 數組名和指針


通常我們認為數組名是一個(gè)指針常量(例如,int a[10]; 那么a是一個(gè)int * const),這種理解是不全面的,正確的理解如下:


作為右值(例如,賦值語(yǔ)句右邊)時(shí)數組名可視為指針常量(系統自動(dòng)轉換);作為左值,例如取地址,sizeof,則不能視為指針。


sizeof(一個(gè)數組)返回的是數組大小*每個(gè)元素占字節數;而sizeof(一個(gè)指針)返回4。


2.2 二維數組


實(shí)際上,不管是一維還是多維數組,都是內存中一塊線(xiàn)性連續空間,因此在內存級別上,其實(shí)都只是一維。





(圖片在參考資料2基礎上稍作更改)



做如下定義:


int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

int ** p;

 

p = (int**)a; /* 不做強制類(lèi)型轉換會(huì )報錯 */

說(shuō)明:


1)p是一個(gè)二級指針,它首先是一個(gè)指針,指向一個(gè)int*;

2)a是二維數組名,它首先是一個(gè)指針,指向一個(gè)含有4個(gè)元素的int數組;


由此可見(jiàn),a和p的類(lèi)型并不相同,如果想將a賦值給p,需要強制類(lèi)型轉換。


3. 為什么不能將二維數組名傳遞給二級指針?

假如我們將a賦值給p,p = (int**)a; 既然p是二級指針,那么當然可以這么用:**p; 這樣會(huì )出什么問(wèn)題呢?


1)首先看一下p的值,p指向a[0][0],即p的值為a[0][0]的地址;


2)再看一下*p的值,p所指向的類(lèi)型是int*,占4字節,根據前面所講的解引用操作符的過(guò)程:從p指向的地址開(kāi)始,取連續4個(gè)字節的內容。得到的正式a[0][0]的值,即0。


3)再看一下**p的值,誒,報錯了?當然報錯了,因為你訪(fǎng)問(wèn)了地址為0的空間,而這個(gè)空間你是沒(méi)有權限訪(fǎng)問(wèn)的。



實(shí)際上這是某一年華為的面試題。感興趣的還可以把a的類(lèi)型定義為char類(lèi)型的二維數組,看看會(huì )發(fā)生什么。



4. 二維數組和二級指針相關(guān)的參數匹配


(來(lái)源參考資料3)

5. 那么問(wèn)題來(lái)了,下題答案是?


參考資料:


1. http://blog.sina.com.cn/s/blog_5c6f793801019t3t.html

2. http://c.biancheng.net/cpp/html/477.html

3. http://www.360doc.com/content/12/0421/23/8302596_205542017.


-----------------------------------------------------------------------------



以上,不知道我有沒(méi)有說(shuō)清楚,有問(wèn)題歡迎評論留言。

————————————————

版權聲明:本文為CSDN博主「吳一奇」的原創(chuàng )文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/wu_nan_nan/article/details/51741030


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: c

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>