第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C:字符指針和數(shù)組的區(qū)別

C:字符指針和數(shù)組的區(qū)別

C
ibeautiful 2019-06-13 17:32:08
C:字符指針和數(shù)組的區(qū)別考慮:char amessage[] = "now is the time";char *pmessage = "now is the time";我從C語(yǔ)言,第二版,上述兩項(xiàng)聲明不做相同的事情。我一直認(rèn)為數(shù)組是操作指針來存儲(chǔ)數(shù)據(jù)的一種方便的方法,但顯然不是這樣的.C中數(shù)組和指針之間的“非平凡”區(qū)別是什么?
查看完整描述

3 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

沒錯(cuò)但這是個(gè)微妙的區(qū)別。基本上,前者:

char amessage[] = "now is the time";

定義一個(gè)數(shù)組,其成員駐留在當(dāng)前作用域的堆??臻g中,而:

char *pmessage = "now is the time";

定義一個(gè)指針,該指針駐留在當(dāng)前作用域的堆棧空間中,但它引用其他地方的內(nèi)存(在這個(gè)指針中,“Now is time”存儲(chǔ)在內(nèi)存的其他地方,通常是字符串表)。

另外,請(qǐng)注意,由于屬于第二個(gè)定義(顯式指針)的數(shù)據(jù)沒有存儲(chǔ)在當(dāng)前作用域的堆??臻g中,因此未指定數(shù)據(jù)的確切存儲(chǔ)位置,不應(yīng)對(duì)其進(jìn)行修改。

編輯:正如Mark,gman和Pavel所指出的,在這些變量中使用Address-of運(yùn)算符時(shí),也存在差異。例如,&pMessage返回char*類型的指針,或chas的指針,而&amessage返回char(*)[16]類型的指針,或指向由16個(gè)字符組成的數(shù)組的指針(與char*一樣,需要像litb指出的那樣取消引用)。


查看完整回答
反對(duì) 回復(fù) 2019-06-13
?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

下面是一個(gè)假設(shè)的內(nèi)存映射,顯示了這兩個(gè)聲明的結(jié)果:

                0x00  0x01  0x02  0x03  0x04  0x05  0x06  0x07
    0x00008000:  'n'   'o'   'w'   ' '   'i'   's'   ' '   't'
    0x00008008:  'h'   'e'   ' '   't'   'i'   'm'   'e'  '\0'
        ...amessage:
    0x00500000:  'n'   'o'   'w'   ' '   'i'   's'   ' '   't'
    0x00500008:  'h'   'e'   ' '   't'   'i'   'm'   'e'  '\0'pmessage:
    0x00500010:  0x00  0x00  0x80  0x00

字符串文本“Now is the time”存儲(chǔ)為內(nèi)存地址0x00008000處的16元素字符數(shù)組。這個(gè)內(nèi)存可能是不可寫的;最好假設(shè)它不是。永遠(yuǎn)不要嘗試修改字符串文本的內(nèi)容。

宣言

char amessage[] = "now is the time";

在內(nèi)存地址0x00500000分配一個(gè)16元素的char數(shù)組,并復(fù)制內(nèi)容字符串的字面意思。這個(gè)記憶是可以寫的;你可以把記憶的內(nèi)容修改成你內(nèi)心的內(nèi)容:

strcpy(amessage, "the time is now");

宣言

char *pmessage = "now is the time";

將單個(gè)指針分配給內(nèi)存地址0x00500010的char,并復(fù)制地址字符串的字面意思。

由于pMessage指向字符串文本,因此不應(yīng)將它用作需要修改字符串內(nèi)容的函數(shù)的參數(shù):

strcpy(amessage, pmessage); /* OKAY */strcpy(pmessage, amessage); /* NOT OKAY */strtok(amessage, " ");   
   /* OKAY */strtok(pmessage, " ");      /* NOT OKAY */scanf("%15s", amessage);      /* OKAY */scanf("%15s", pmessage);   
      /* NOT OKAY */

諸若此類。如果您將pMessage更改為指向amessage:

pmessage = amessage;

然后,它可以在任何地方使用,可以使用。


查看完整回答
反對(duì) 回復(fù) 2019-06-13
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

數(shù)組包含元素。指針指向它們。

第一種是一種簡(jiǎn)短的說法。

char amessage[16];amessage[0] = 'n';amessage[1] = 'o';...amessage[15] = '\0';

也就是說,它是一個(gè)包含所有字符的數(shù)組。特殊的初始化為您初始化它,并自動(dòng)確定它的大小。數(shù)組元素是可修改的-您可以覆蓋其中的字符。

第二種形式是指針,它只指向字符。它不直接存儲(chǔ)字符。由于數(shù)組是字符串文本,所以不能將指針寫入它所指向的位置。

char *pmessage = "now is the time";*pmessage = 'p'; /* undefined behavior! */

這段代碼可能會(huì)在你的盒子上崩潰。但它可以做任何它喜歡做的事,因?yàn)樗男袨槭遣淮_定的。


查看完整回答
反對(duì) 回復(fù) 2019-06-13
  • 3 回答
  • 0 關(guān)注
  • 582 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)