久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

字符數(shù)組,,字符指針,Sizeof總結(jié)(轉(zhuǎn)載) - 小團(tuán)的日志 - 網(wǎng)易博客

 徐子欽 2009-12-11

1.以字符串形式出現(xiàn)的,,編譯器都會(huì)為該字符串自動(dòng)添加一個(gè)0作為結(jié)束符,,如在代碼中寫(xiě)
  "abc",那么編譯器幫你存儲(chǔ)的是"abc\0"

2."abc"是常量嗎?答案是有時(shí)是,,有時(shí)不是,。

  不是常量的情況:"abc"作為字符數(shù)組初始值的時(shí)候就不是,如
                  char str[] = "abc";
    因?yàn)槎x的是一個(gè)字符數(shù)組,,所以就相當(dāng)于定義了一些空間來(lái)存放"abc",,而又因?yàn)?br>    字符數(shù)組就是把字符一個(gè)一個(gè)地存放的,所以編譯器把這個(gè)語(yǔ)句解析為
    char str[3] = {'a','b','c'};
                  又根據(jù)上面的總結(jié)1,,所以char str[] = "abc";的最終結(jié)果是
    char str[4] = {'a','b','c','\0'};
    做一下擴(kuò)展,,如果char str[] = "abc";是在函數(shù)內(nèi)部寫(xiě)的話,,那么這里
    的"abc\0"因?yàn)椴皇浅A?,所以?yīng)該被放在棧上。
 
  是常量的情況:  把"abc"賦給一個(gè)字符指針變量時(shí),,如
                  char* ptr = "abc";
    因?yàn)槎x的是一個(gè)普通指針,,并沒(méi)有定義空間來(lái)存放"abc",,所以編譯器得幫我們
    找地方來(lái)放"abc",顯然,,把這里的"abc"當(dāng)成常量并把它放到程序的常量區(qū)是編譯器
    最合適的選擇,。所以盡管ptr的類(lèi)型不是const char*,并且ptr[0] = 'x';也能編譯
    通過(guò),但是執(zhí)行ptr[0] = 'x';就會(huì)發(fā)生運(yùn)行時(shí)異常,,因?yàn)檫@個(gè)語(yǔ)句試圖去修改程序
    常量區(qū)中的東西,。
    記得哪本書(shū)中曾經(jīng)說(shuō)過(guò)char* ptr = "abc";這種寫(xiě)法原來(lái)在c++標(biāo)準(zhǔn)中是不允許的,
    但是因?yàn)檫@種寫(xiě)法在c中實(shí)在是太多了,,為了兼容c,,不允許也得允許。雖然允許,,
    但是建議的寫(xiě)法應(yīng)該是const char* ptr = "abc";這樣如果后面寫(xiě)ptr[0] = 'x'的
    話編譯器就不會(huì)讓它編譯通過(guò),,也就避免了上面說(shuō)的運(yùn)行時(shí)異常。
    又?jǐn)U展一下,,如果char* ptr = "abc";寫(xiě)在函數(shù)體內(nèi),,那么雖然這里的"abc\0"被
    放在常量區(qū)中,但是ptr本身只是一個(gè)普通的指針變量,,所以ptr是被放在棧上的,,
    只不過(guò)是它所指向的東西被放在常量區(qū)罷了。

3.數(shù)組的類(lèi)型是由該數(shù)組所存放的東西的類(lèi)型以及數(shù)組本身的大小決定的,。
  如char s1[3]和char s2[4],,s1的類(lèi)型就是char[3],s2的類(lèi)型就是char[4],,
  也就是說(shuō)盡管s1和s2都是字符數(shù)組,,但兩者的類(lèi)型卻是不同的。

4.字符串常量的類(lèi)型可以理解為相應(yīng)字符常量數(shù)組的類(lèi)型,,
  如"abcdef"的類(lèi)型就可以看成是const char[7]

5.sizeof是用來(lái)求類(lèi)型的字節(jié)數(shù)的。如int a;那么無(wú)論sizeof(int)或者是sizeof(a)都
  是等于4,,因?yàn)閟izeof(a)其實(shí)就是sizeof(type of a)

6.對(duì)于函數(shù)參數(shù)列表中的以數(shù)組類(lèi)型書(shū)寫(xiě)的形式參數(shù),,編譯器把其解釋為普通
  的指針類(lèi)型,如對(duì)于void func(char sa[100],int ia[20],char *p)
  則sa的類(lèi)型為char*,,ia的類(lèi)型為int*,,p的類(lèi)型為char*


7.根據(jù)上面的總結(jié),來(lái)實(shí)戰(zhàn)一下:
  對(duì)于char str[] = "abcdef";就有sizeof(str) == 7,因?yàn)閟tr的類(lèi)型是char[7],,
  也有sizeof("abcdef") == 7,,因?yàn)?abcdef"的類(lèi)型是const char[7]。
  對(duì)于char *ptr = "abcdef";就有sizeof(ptr) == 4,,因?yàn)閜tr的類(lèi)型是char*,。
  對(duì)于char str2[10] = "abcdef";就有sizeof(str2) == 10,因?yàn)閟tr2的類(lèi)型是char[10],。
  對(duì)于void func(char sa[100],int ia[20],char *p);
  就有sizeof(sa) == sizeof(ia) == sizeof(p) == 4,,
  因?yàn)閟a的類(lèi)型是char*,ia的類(lèi)型是int*,p的類(lèi)型是char*,。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)論公約

    類(lèi)似文章 更多