欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【C語(yǔ)言進(jìn)階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?

嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 來(lái)源:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 2022-08-31 13:21 ? 次閱讀

相信學(xué)習(xí)過(guò)C語(yǔ)言的童鞋,一定被這2個(gè)東西折騰過(guò)吧?究竟它們都是何方神圣呢?帶著這個(gè)問(wèn)題,筆者想通過(guò)本文給你一個(gè)清晰的答案。通過(guò)閱讀本文,你將了解到以下內(nèi)容:

  • 什么是數(shù)組指針?
  • 什么是指針數(shù)組?
  • 數(shù)組指針和指針數(shù)組有什么區(qū)別?
  • 使用指針數(shù)組的注意事項(xiàng)

什么是數(shù)組指針?


? 【數(shù)組指針】,從字面意思上理解,就是一個(gè)【指針】;“數(shù)組”只是起到了修飾“指針”的作用,所以連起來(lái)的意思就是【指向數(shù)組的指針】。這一點(diǎn)與上一篇文章介紹 【函數(shù)指針】有異曲同工的含義。

? 從C語(yǔ)言的語(yǔ)法上理解,數(shù)組指針的表示形式為:

//定義一個(gè)一維數(shù)組
int a[3];

//定義一個(gè)指針,指向一維數(shù)組的首地址
int *q = a;

//定義一個(gè)3行4列的二維數(shù)組
int b[3][4]; 

//定義一個(gè)數(shù)組指針,它指向二維數(shù)組的首地址
int (*p)[4] = b;

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-eQIadh0d-1661923181862)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

? 從數(shù)組指針的形式上看,因?yàn)?)運(yùn)算符擁有最高優(yōu)先級(jí),所以整個(gè)語(yǔ)句優(yōu)先被解釋成一個(gè)指針;接著,這個(gè)指針再指向另一個(gè)數(shù)組的首地址,[x]接上該數(shù)組的列數(shù),即得到如上的數(shù)組指針的定義。

? 經(jīng)過(guò)這個(gè)例子,我們可以看到,數(shù)組指針一般用于表達(dá)多維數(shù)組,對(duì)比起多維數(shù)組的表示,采用數(shù)組指針的形式可以在一定程度上理解難度減小了。比如,有了如上的數(shù)組指針定義后,這里b是個(gè)二維數(shù)組的數(shù)組名,相當(dāng)于一個(gè)二級(jí)指針常量;p是一個(gè)指針變量,它指向包含5個(gè)int元素的一維數(shù)組,此時(shí)p的增量以它所指向的**一維數(shù)組長(zhǎng)度為單位;*(**p+i)是一維數(shù)組b[i][0]的地址;(p+2)+3表示b[2][3]地址(第一行為0行,第一列為0列),(*(p+2)+3)表示b[2][3]的值。


什么是指針數(shù)組?


? 【指針數(shù)組】,從字面意思上理解,它就是一個(gè)數(shù)組,只不過(guò)“指針”是用于修飾“數(shù)組”的,所以合起來(lái)理解就是:【一個(gè)數(shù)組元素存放的是指針的數(shù)組】。

? 從C語(yǔ)言的語(yǔ)法上理解,【指針數(shù)組】的定義形式如下所示:

//定義一個(gè)char *的指針數(shù)組
char *p[5];

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Qud5CpbF-1661923181865)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

? 這里,它表示的含義是,一個(gè)由5個(gè)元素組成的一維數(shù)組,每個(gè)數(shù)組元素都是一個(gè)指針(地址)。訪(fǎng)問(wèn)數(shù)組的元素,我們都是采用 數(shù)組名[數(shù)組下標(biāo)] 的形式訪(fǎng)問(wèn)的,那么【指針數(shù)組】也不例外,訪(fǎng)問(wèn)第一個(gè)元素,則是p[0];同理,p[2]表示的是第3個(gè)指針。


數(shù)組指針和指針數(shù)組有什么區(qū)別?


? 從字面上看,確實(shí)很容易混淆兩者的概念;我們理解的時(shí)候,需要注意名詞誰(shuí)先誰(shuí)后。一般來(lái)說(shuō),在前面的名詞是用于修飾后面的名詞,而后面的名詞決定了整個(gè)詞組的性質(zhì)。

? 【數(shù)組指針】:數(shù)組修飾指針,它的本質(zhì)是一個(gè)指針;一般這個(gè)指針指向一個(gè)二維數(shù)組,形式為: int (*p)[M]。

? 【指針數(shù)組】:指針修飾數(shù)組,它的本質(zhì)是一個(gè)數(shù)組;這個(gè)數(shù)組里面的元素,存放的都是指針,形式為: int *p[M]。

? 如上定義中,第一個(gè)M表示二維數(shù)組的列數(shù),第二個(gè)M表示的指針數(shù)組(一維數(shù)組)的元素個(gè)數(shù)。

? 數(shù)據(jù)訪(fǎng)問(wèn)方面:

  • (*p)[0] 表示的是二維數(shù)組中的第一行的首地址;
  • p[0] 表示的指針數(shù)組的第一個(gè)元素,即第一個(gè)指針地址。

使用指針數(shù)組的注意事項(xiàng)


? 這兩個(gè)概念不但容易混淆,而且在使用過(guò)程中也是十分容易出錯(cuò),曾經(jīng)筆者在【指針數(shù)組】上摘過(guò)跟頭?,F(xiàn)將出錯(cuò)的教訓(xùn)分享給大家:

  • 求一個(gè)指針數(shù)組的中元素的個(gè)數(shù),不是簡(jiǎn)單地使用sizeof

? 比如有一個(gè)指針數(shù)組的定義:

char *p[5];

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-CRsvrkY7-1661923181868)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

? 假設(shè)在編程平臺(tái)上,一個(gè)指針?biāo)加玫牡刂房臻g是4個(gè)字節(jié),即sizeof(char ) = 4;那么如果使用sizeof§去求這個(gè)指針數(shù)組所占用的地址空間時(shí),求得的大小是45=20;而每個(gè)元素都是char *類(lèi)型,所以求得指針元素的個(gè)數(shù)為: 20 / 4 = 5。

? 于是,我們得出一個(gè)公式,求指針數(shù)組的元素個(gè)數(shù):

//直接求得指針數(shù)組p的元素個(gè)數(shù)
cnt = sizeof(p) / sizeof(p[0]);

//很多時(shí)候,我們會(huì)定義一個(gè)宏來(lái)表示,形式如下:

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a)  (sizeof(a) / sizeof(a[0]))
#endif

//使用ARRAY_SIZE宏求指針數(shù)組p的元素個(gè)數(shù)
cnt = ARRAY_SIZE(p);

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qwfXvoOo-1661923181869)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

  • 定義字符串類(lèi)型的指針數(shù)組時(shí),每個(gè)元素(字符串)注意用分號(hào)隔開(kāi),否則可能出現(xiàn)意想不到的事情

? 假設(shè)有以下2個(gè)指針數(shù)組的定義:

const char *p1[] = 
{
    "12345",
    "23456",
    "34567",
    "45678",
    "56789",
};

const char *p2[] = 
{
    "12345",
    "23456"
    "34567",
    "45678"
    "56789",
};

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Wt3RK9bs-1661923181874)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

? 如果你不仔細(xì)看,你可能覺(jué)得p1和p2的定義是一致;仔細(xì)一看,原來(lái)p2中少了2個(gè)分號(hào);而這2個(gè)分號(hào)一少,直接就導(dǎo)致p2的最終被編譯器識(shí)別成的定義為:

//最終被識(shí)別的定義
const char *p2[] = 
{
    "12345",
    "2345634567",
    "4567856789",
};

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-aNeQ6PqX-1661923181875)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

? 看到區(qū)別了嗎?由于分號(hào)的缺失導(dǎo)致前后相鄰的字符串被結(jié)合在一塊,被連接成一個(gè)更長(zhǎng)的字符串,而這種【拼接】是編譯器自動(dòng)識(shí)別完成的,它不會(huì)提示任何錯(cuò)誤,因?yàn)樵谒磥?lái)根本就不是錯(cuò)誤。對(duì)使用者而言,這樣定義一改變,原本本應(yīng)該為5個(gè)元素的字符串?dāng)?shù)組,就變成了3個(gè)字符串的數(shù)組,這簡(jiǎn)直就是災(zāi)難啊!??!


? 以上就是筆者對(duì)【數(shù)組指針】和【指針數(shù)組】的實(shí)踐,得出的切實(shí)理解,希望能夠幫助大家更近一步地理解它們。以上提及觀(guān)點(diǎn),均為筆者本人的觀(guān)點(diǎn),如有紕漏之處,還望指正。感激不盡。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137780
  • 數(shù)組指針
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    5250
  • 函數(shù)指針
    +關(guān)注

    關(guān)注

    2

    文章

    56

    瀏覽量

    3835
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言數(shù)組名和指針

    指針C/C++語(yǔ)言的特色,而數(shù)組名與指針有太多的相似,甚至很多時(shí)候,
    發(fā)表于 08-27 17:48 ?751次閱讀

    C語(yǔ)言數(shù)組指針的區(qū)別

    大家好,我是嵌入式老林,從事嵌入式軟件開(kāi)發(fā)多年,今天分享的內(nèi)容是C語(yǔ)言數(shù)組指針的區(qū)別,希望能對(duì)你有所幫助。
    發(fā)表于 07-11 12:40 ?401次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>數(shù)組</b>和<b class='flag-5'>指針</b>的區(qū)別

    C語(yǔ)言中指針數(shù)組數(shù)組指針的區(qū)別

    指針數(shù)組之間存在著緊密的關(guān)系。在本文中,我們將探討指針數(shù)組的關(guān)系、指針算術(shù)和數(shù)組遍歷、多維
    發(fā)表于 08-17 15:29 ?436次閱讀

    轉(zhuǎn): 吊絲整理C語(yǔ)言 數(shù)組指針 指針數(shù)組

    主要針對(duì)指針數(shù)組數(shù)組指針。大家看看對(duì)不對(duì)。沒(méi)有好辦法把文檔內(nèi)容貼出來(lái)。先貼幾個(gè)圖片吧。里面有幾個(gè)錯(cuò)誤,等你自己發(fā)掘吧,這樣你就可以笑笑說(shuō)
    發(fā)表于 08-08 10:03

    C語(yǔ)言入門(mén)教程-用指針操作數(shù)組

    C語(yǔ)言入門(mén)教程 在C語(yǔ)言中,數(shù)組指針的關(guān)系十分密切。要想有效地使用
    發(fā)表于 07-29 12:18 ?1508次閱讀

    指針數(shù)組都是C語(yǔ)言的精髓所在 兩者有何聯(lián)系區(qū)別

    指針數(shù)組都是C語(yǔ)言的精髓所在,對(duì)于很多C程序員來(lái)說(shuō),如果你問(wèn)這樣一個(gè)問(wèn)題:
    的頭像 發(fā)表于 05-27 14:51 ?4207次閱讀
    <b class='flag-5'>指針</b>和<b class='flag-5'>數(shù)組</b><b class='flag-5'>都是</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的精髓所在 兩者有何聯(lián)系區(qū)別

    指針數(shù)組數(shù)組指針的區(qū)別

    這里我們區(qū)分兩個(gè)重要的概念:指針數(shù)組、數(shù)組指針。
    的頭像 發(fā)表于 06-29 15:30 ?2w次閱讀
    <b class='flag-5'>指針</b><b class='flag-5'>數(shù)組</b>和<b class='flag-5'>數(shù)組</b><b class='flag-5'>指針</b>的區(qū)別

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組指針

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組指針
    的頭像 發(fā)表于 06-29 15:38 ?1.5w次閱讀
    理解函數(shù)<b class='flag-5'>指針</b>、函數(shù)<b class='flag-5'>指針</b><b class='flag-5'>數(shù)組</b>、函數(shù)<b class='flag-5'>指針</b><b class='flag-5'>數(shù)組</b>的<b class='flag-5'>指針</b>

    C語(yǔ)言中指針數(shù)組

    #define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //數(shù)組名arry表示數(shù)組首元素的地址*int p,temp;//可直接初始化定義指針
    發(fā)表于 01-13 13:11 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中指針</b>與<b class='flag-5'>數(shù)組</b>

    C語(yǔ)言指針數(shù)組的區(qū)別

    C語(yǔ)言教程中我們使用通過(guò)數(shù)組名通過(guò)偏移和指針偏移都可以遍歷數(shù)組,那么指針
    的頭像 發(fā)表于 07-18 16:29 ?1990次閱讀

    二維數(shù)組數(shù)組指針以及指針數(shù)組

    二維數(shù)組數(shù)組指針以及指針數(shù)組
    的頭像 發(fā)表于 08-16 09:02 ?2756次閱讀

    C語(yǔ)言數(shù)組元素的指針

    C語(yǔ)言調(diào)用函數(shù)時(shí)虛實(shí)結(jié)合的方法都是采用“值傳遞”方式,當(dāng)用變量名作為函數(shù)參數(shù)時(shí)傳遞的是變量的值,當(dāng)用數(shù)組名作為函數(shù)參數(shù)時(shí)。 由于數(shù)組
    的頭像 發(fā)表于 03-10 14:45 ?983次閱讀

    C語(yǔ)言中什么是指針數(shù)組

    C語(yǔ)言中一個(gè)數(shù)組,若其元素均為指針類(lèi)型數(shù)據(jù),稱(chēng)為指針數(shù)組,也就是說(shuō),
    的頭像 發(fā)表于 03-10 15:26 ?1884次閱讀

    數(shù)組指針不能混用的情況

    數(shù)組指針不能混用的情況? 數(shù)組指針C/C++ 中非常常見(jiàn)的特性和概念。然而,在某些情況下
    的頭像 發(fā)表于 12-07 13:46 ?654次閱讀

    數(shù)組指針不相同嗎?數(shù)組指針有哪些區(qū)別

    數(shù)組就是指針,指針就是數(shù)組,這樣的言論在評(píng)論區(qū)看到不下于10次。
    的頭像 發(fā)表于 12-13 16:34 ?1689次閱讀
    <b class='flag-5'>數(shù)組</b>和<b class='flag-5'>指針</b>不相同嗎?<b class='flag-5'>數(shù)組</b>和<b class='flag-5'>指針</b>有哪些區(qū)別