• <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>
            Impossible is nothing  
              愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風(fēng)來又走   女人如花花似夢
            公告
            日歷
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345
            統(tǒng)計
            • 隨筆 - 8
            • 文章 - 91
            • 評論 - 16
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

            本文主要是記錄一些初級的但是有時候我自己容易忽略或者忘記東西,僅作備忘錄之用   
            1)、銜接符 \

            \ 在c++中可以作為銜接符(忘了規(guī)范的術(shù)語是不是這么叫了, 汗自己一個~),例如:

              //this is memo\

            this is memo too

            上面兩行在c++中,編譯器會認為是一行。

            不過\一般只在宏定義中使用,因為如果是字符串,那么別寫分號就行,如:
            char *s = "How "
                "are "
                "you?";
            如果是一般的語句,那么就直接換,比如:
            int sum = i +
                j;

            2)##

            ## 叫做指令粘貼符,它的英文術(shù)語叫做token-pasting operator,主要在宏定義中使用。使用例子如下:

            #define paster( n ) printf( "token" #n " = %d", token##n )

            int token9 = 9;

            用如下方式調(diào)用宏,

            paster( 9 ); //輸出: taken9 = 9

            上面的宏此時等價于

            printf( "token" "9" " = %d", token9 );

            結(jié)果就是:

            printf( "token9 = %d", token9 );

            3) C++函數(shù)參數(shù)入棧順序--從右到左

            下面的例子用來驗證C++函數(shù)參數(shù)入棧順序:

               void test(int i1, int i2, int i3)

            {

                printf(“i1=%d, i2=%d, i3=%d\n“,i1,i2,i3);

            }

            int i=0;

            test(++i,++i,++i);

            則輸出結(jié)果為:i1=3, i2=2, i3=1

            4)一個有趣的小問題--表達式與算符結(jié)合順序

            在VC論壇里看到有人對下面的表達式計算結(jié)果有點迷惑,

            int i = 1;

            int k = (++i) + (++i)+ (++i);

            int i2 = 1;

            int k2 = (++i2) + (++i2);

            我也測試了一下,很多人一開始會以為 k = 2 + 3 + 4  =9;

            但是事實上在VC, DevC++4.9(GCC)里面編譯, 執(zhí)行結(jié)果k=10;

            綜合其他人的一些看法和我自己的測試,得出結(jié)論:

            k= (++i)+(++i)+(++i);//等價于++i,++i,k = i+i + (++i);也就是 k = 3 + 3 + 4 = 10。

            因此,k2的結(jié)果為6。

            當(dāng)然,這個沒有進行語法上的深層次分析,有興趣的朋友可以自己分析一下C++的相關(guān)語法。

            4)下面先看問題:

            ////bowex ()///////////////////////////////////////////////////////

            char uu[3][2];
            CString s;
            for(int i=0;i<3;i++)
            {
              s="我";
              strcpy(uu[i],s);
            }

            運行完以上程序后為何數(shù)組uu中的內(nèi)容是

            uu[0] --- > 我我我
            uu[1] --- > 我我
            uu[2] --- > 我

            而不是
            uu[0] --- > 我
            uu[1] --- > 我
            uu[2] --- > 我         為何? 奇怪! 多謝

            ////////////////////////////////////////////////////////////////////

            網(wǎng)友“QunKangLi(維護成本與程序員的創(chuàng)造力的平方成正比)”給出解釋:

            char uu[3][3];//這樣就行了,字符串結(jié)束符占一個字符寬度?!?/p>

            這個解釋是很對,不過我還是要強調(diào)一下這種情況可能產(chǎn)生的嚴(yán)重后果:

            像這種情況讓我想起了strcpy函數(shù)可能引起非法內(nèi)存訪問,也就是說,如果

            strcpy拷貝的目的地址分配的空間不夠,那么strcpy會把空間后面的地址也占用,

            這樣就可能使某些數(shù)據(jù)被意外修改,從而導(dǎo)致程序崩潰或者數(shù)據(jù)異常。之所以有

            這種感受,是因為以前碰到有個程序,就發(fā)生這樣的錯誤,就是因為strcpy拷貝的內(nèi)容

            過長從而把數(shù)據(jù)結(jié)構(gòu)中緊接其后的成員的數(shù)據(jù)變?yōu)?了,結(jié)果程序當(dāng)然出現(xiàn)意外。

            假設(shè)把上面的for循環(huán)用下面的語句代替 那么結(jié)果就更加荒唐, 因為會出現(xiàn)亂碼。

            char uu[3][2];
            CString s;

            s="我";
            strcpy(uu[2],s);
             strcpy(uu[1],s);
            strcpy(uu[0],s);

             大家可以編譯一下上面的代碼,運行程序 你可以看到uu數(shù)組中有亂碼。

            如果輸出的話,應(yīng)該是這樣的,

            uu[0] --- > 我
            uu[1] --- > (空串)
            uu[2] --- > (空串)

            是什么原因大家應(yīng)該一目了然了吧。
            posted on 2006-03-12 23:14 笑笑生 閱讀(442) 評論(0)  編輯 收藏 引用 所屬分類: C++語言
             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            精品久久久中文字幕人妻| 国产精品美女久久福利网站| 久久国产乱子伦精品免费午夜| 久久香蕉综合色一综合色88| 国产精品免费久久| 久久久久99这里有精品10| 亚洲AV无码成人网站久久精品大| 国内精品久久久久伊人av| 人妻丰满?V无码久久不卡| 亚洲中文字幕无码久久2017 | 色综合久久无码中文字幕| 久久久久久综合一区中文字幕| 久久久不卡国产精品一区二区| 伊人久久精品无码二区麻豆| 成人午夜精品久久久久久久小说| 日产精品久久久久久久| 久久婷婷人人澡人人| 久久精品国产精品青草app| 亚洲中文精品久久久久久不卡| 久久99国产精品成人欧美| 久久精品国产99久久久| 少妇熟女久久综合网色欲| 欧美久久久久久午夜精品| 久久久中文字幕| 69久久夜色精品国产69| 亚洲国产美女精品久久久久∴| 国产精品成人久久久久三级午夜电影| 中文字幕人妻色偷偷久久| 久久久国产视频| 天堂无码久久综合东京热| 久久久久国产| 久久久久亚洲AV综合波多野结衣| 久久w5ww成w人免费| 精品久久久无码人妻中文字幕豆芽| 四虎国产精品成人免费久久| 日本欧美国产精品第一页久久| 国内精品久久久久久久久电影网| 国产激情久久久久影院老熟女免费| 国内精品伊人久久久久影院对白| 91久久香蕉国产熟女线看| 久久91精品综合国产首页|