在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

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

            C/C++二維數(shù)組名和二級(jí)指針

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

            1. 指針

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


            1.2 解引用操作符(dereference operator)會(huì)根據(jù)指針當(dāng)前的地址值,以及所指向的數(shù)據(jù)類型,訪問(wèn)一塊連續(xù)的內(nèi)存空間(大小由指針?biāo)赶虻臄?shù)據(jù)類型決定),將這塊空間的內(nèi)容轉(zhuǎn)換成相應(yīng)的數(shù)據(jù)類型,并返回左值。

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


            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把它寫成十六進(jìn)制會(huì)更容易理解:0x03020100(4個(gè)字節(jié)分別為3,2,1,0)。我想你已經(jīng)明白了,指針pi指向的類型為int,因此在解引用時(shí),需要訪問(wèn)4個(gè)字節(jié)的連續(xù)空間,并將其轉(zhuǎn)換為int返回。



            2. 數(shù)組

            2.1 數(shù)組名和指針


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


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


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


            2.2 二維數(shù)組


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





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



            做如下定義:


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

            int ** p;

             

            p = (int**)a; /* 不做強(qiáng)制類型轉(zhuǎn)換會(huì)報(bào)錯(cuò) */

            說(shuō)明:


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

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


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


            3. 為什么不能將二維數(shù)組名傳遞給二級(jí)指針?

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


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


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


            3)再看一下**p的值,誒,報(bào)錯(cuò)了?當(dāng)然報(bào)錯(cuò)了,因?yàn)槟阍L問(wèn)了地址為0的空間,而這個(gè)空間你是沒(méi)有權(quán)限訪問(wèn)的。



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



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


            (來(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)題歡迎評(píng)論留言。

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

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

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


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



            關(guān)鍵詞: c

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉