• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            C++分析研究  
            C++
            日歷
            <2014年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456
            統(tǒng)計(jì)
            • 隨筆 - 92
            • 文章 - 4
            • 評(píng)論 - 4
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

            有時(shí)候錯(cuò)誤的代碼會(huì)讓我們更深刻的理解一門(mén)編程語(yǔ)言,所以在Learn c the hard way一書(shū)中,作者不停的讓我們把正確的代碼破壞掉,發(fā)揮我們的好奇心與想象力,去發(fā)覺(jué)c語(yǔ)言的一些特性。
            為了弄清弄清c中int與char型變量存儲(chǔ)的異同和gcc對(duì)無(wú)'\0'字符數(shù)組的的反應(yīng),修改了Learn c the hard way書(shū)中的ex8
            代碼如下
            #include <stdio.h>
            int main(int argc,char *argv[])
            {
            int areas[] = {10, 12, 13, 14, 20};
            char name [] = "Zed";
            char full_name[] = {
            'Z', 'e', 'd',
            ' ', 'A', '.', ' ',
            'S', 'h', 'a', 'w'
            };
            unsigned int interg[2];
            interg[0] = '\0' * 0x01000000 + 'A'*0x00010000 + 'B' * 0x00000100 + 'C' * 0x00000001;
            unsigned int inter = interg[0];
            // WARNING: On some system you may have to change the
            // %ld in this code to a %u since it will use unsignt ints
            printf("The size of an int: %ld\n",sizeof(int));
            printf("The siez of areas (int[]):%ld\n",
            sizeof(areas));
            printf("The number of ints in areas: %ld\n",
            sizeof(areas)/sizeof(int));
            printf("The first area is %d, the 2nd %d.\n",
            areas[0],areas[10]);
            printf("The size of a char: %ld\n",sizeof(char));
            printf("The size of name (char[]): %ld\n",
            sizeof(name)/sizeof(char));
            printf("The size of full_name (char[]): %ld\n",
            sizeof(full_name));
            printf("The number of chars: %ld\n",
            sizeof(full_name) / sizeof(char));
            // !!!其中full_name未設(shè)置null結(jié)尾
            printf("name=\"%s\" and full_name=\"%s\"\n",
            name, full_name);
            // test 證明了gcc把未初始化的地方初始為0
            printf("the char after the full_name(shuold be error):%c\n",full_name[12]);
            // 用 int 存儲(chǔ)字符串
            printf("interg=%X\n", interg);
            printf("inter=\"%s\"\n", &inter);
            printf("interg=\"%s\"\n", interg);
            return 0;
            }
            重點(diǎn)在于
            char full_name[] = {
            'Z', 'e', 'd',
            ' ', 'A', '.', ' ',
            'S', 'h', 'a', 'w'
            };
            unsigned int interg[2];
            interg[0] = '\0' * 0x01000000 + 'A'*0x00010000 + 'B' * 0x00000100 + 'C' * 0x00000001;
            unsigned int inter = interg[0];
            可以看到full_name字符串初始化的時(shí)候是沒(méi)有null結(jié)尾的,如果的vc中編譯并以字符串形式輸出的話會(huì)跟上亂碼
            interg的數(shù)組第一個(gè)元素中我分別在四個(gè)字節(jié)中放入了'\0'(即0)、'A'、'B'、'C',第二個(gè)元素未初始化。
            inter中放的是同樣的數(shù)字。
            輸出如下:
            The size of an int: 4
            The siez of areas (int[]):20
            The number of ints in areas: 5
            The first area is 10, the 2nd -1493946707.
            The size of a char: 1
            The size of name (char[]): 4
            The size of full_name (char[]): 11
            The number of chars: 11
            name="Zed" and full_name="Zed A. Shaw"
            the char after the full_name(shuold be error):
            interg=6EB11E70
            inter="CBA"
            interg="CBA"
            可以看到以字符串輸出的full_name并沒(méi)有因?yàn)闊o(wú)null結(jié)尾而輸出亂碼或錯(cuò)誤,在csdn論壇上了解到可能是因?yàn)間cc將字符串存儲(chǔ)區(qū)全部初始化為零。
            PS:對(duì)于數(shù)組的初始化,可以只初始化一個(gè)元素,就可以使其他元素為零(Learn c the hard way);
            inter以字符串輸出的結(jié)果是按我賦值的倒序輸出的,這個(gè)是因?yàn)樾《说臄?shù)據(jù)存儲(chǔ)造成的托福答案

            posted on 2014-08-25 21:15 HAOSOLA 閱讀(314) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


             
            Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
            PK10開(kāi)獎(jiǎng) PK10開(kāi)獎(jiǎng)
            日本五月天婷久久网站| 色综合久久久久网| 久久久青草青青国产亚洲免观| 伊人色综合久久天天人手人婷| 亚洲欧美一级久久精品| 久久久久久久国产免费看| 国产成人久久777777| 岛国搬运www久久| 久久er国产精品免费观看8| 久久国产精品无码网站| 亚洲欧美久久久久9999| 久久99久久99精品免视看动漫| 国产精品久久久久免费a∨| 99蜜桃臀久久久欧美精品网站| 狠狠色婷婷久久综合频道日韩 | 久久综合给久久狠狠97色| 少妇内射兰兰久久| 波多野结衣中文字幕久久| 久久国产精品一区二区| 精品免费久久久久国产一区| 一本色综合久久| 国产精品一久久香蕉国产线看观看| 成人资源影音先锋久久资源网| 一级做a爰片久久毛片16| 久久精品成人| 久久亚洲欧美国产精品| 国产精品99久久久久久宅男| 偷偷做久久久久网站| 精品免费tv久久久久久久| 久久露脸国产精品| 亚洲国产精品久久久天堂 | 久久人人爽人人爽人人片AV麻豆| 午夜精品久久久内射近拍高清| 久久婷婷五月综合色奶水99啪| 国产精品久久午夜夜伦鲁鲁| 久久久久亚洲AV成人网人人网站 | 久久本道久久综合伊人| 日韩精品久久久久久久电影蜜臀| 久久99国产综合精品女同| 欧美激情精品久久久久久久| 精品乱码久久久久久久|