• <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>

            把握命運,追逐夢想

            對自己所做的事要有興趣,同時還要能夠堅持不懈

            統(tǒng)計

            留言簿(1)

            閱讀排行榜

            評論排行榜

            數(shù)組 指針 const

            #include<stdio.h>
            #include
            <string.h>

            int main()
            {
                
            //下面的寫法是可以的
                char a[5= "abcd";    
                
            const char b[10= "safajshjf";
                
            const char *= "asdfdsgd";
                
            char *const d = "safdsfgsdg";
                
            const char* const e = "adsgfsdg";


                
            //下面的c和上面的d,e不同,c不是const的,而是c指向的內(nèi)存區(qū)是const的,所以下面的寫法可以
                c = "fasdffds";
                
            //下面的三行都不行,原因是數(shù)組名除了初始化時,再也不能作為左值了。而const類型的d和e也不能再作為左值。
                /*a="afds";
                b = "asfdsfdgg";
                d = "fasdgsdg";
                e = "fasdfgg";
            */



                

                
            //下面的可以,因為第一參數(shù)要求是非const的,下面的第一參數(shù)都滿足條件
                strcpy(a,"sdfs");
                strcpy(d,
            "sfsdgd");
                
            //下面的不通過,因為第一參數(shù)要求是非const的,因為const常量不能修改
                /*strcpy(b,"sfsdgf");
                strcpy(c,"sfsgddg");
                strcpy(e,"safsgdg");
            */


                

                
            //下面的寫法是可以的,因為上面的a數(shù)組并不是常量,而是把“abcd”賦值給了a所指向的內(nèi)存區(qū),所以a的地址可以賦值給別的指針
                char *f=a;
                f 
            = d;
                
            //下面的是不行的,因為b的數(shù)組內(nèi)存是常量的,不可以進(jìn)行修改,所以不能把b的地址賦值給非const指針
                /*f = b;
                f = c;
                f =e;
            */



                
            //下面的五個都是可以的,因為const和非const的變量都可以賦值給const類型的變量
                const char *= a;
                g  
            =b;
                g  
            = c;
                g 
            = d;
                g 
            = e;

                
            //下面嘗試修改上面的五塊內(nèi)存區(qū)


                
            return 0;
            }


            //總結(jié):
            //const指針的用法如上例所示,分別是限制指針和指針內(nèi)存區(qū)域的,但是雖然有這些限制,也僅是針對當(dāng)前變量的限制,如果原本的內(nèi)存地址已知,后來賦值給了const*類型的
            //指針,那么利用原來的內(nèi)存地址依然是可以修改該內(nèi)存區(qū)域的。
            //
            //數(shù)組名相當(dāng)于*const類型的,因為數(shù)組名和*const都在以后都不能再給數(shù)組名或指針賦值,而只能修改數(shù)組的內(nèi)存區(qū)或指針指向的內(nèi)存區(qū)。
            //const* typename const類型的是指針和內(nèi)存區(qū)都不可以修改的。
            //
            //無論是整形數(shù)組還是字符數(shù)組,初始化的時候都是賦值初始化的,不要把字符數(shù)組的初始化理解成把一個常量字符串的指針賦值給了字符數(shù)組名。
                //下面的寫法是可以的
                char a[5= "abcd";    
            00401740  mov         eax,dword ptr [___xi_z+2Ch (4020E4h)] 
            00401745  mov         dword ptr [ebp-0Ch],eax 
            00401748  mov         cl,byte ptr [___xi_z+30h (4020E8h)] 
            0040174E  mov         
            byte ptr [ebp-8],cl 
                
            const char b[8= "safader";
            00401751  mov         edx,dword ptr [___xi_z+34h (4020ECh)] 
            00401757  mov         dword ptr [ebp-1Ch],edx 
            0040175A  mov         eax,dword ptr [___xi_z
            +38h (4020F0h)] 
            0040175F  mov         dword ptr [ebp
            -18h],eax 
                
            const char *= "asdfdsgd";
            00401762  mov         dword ptr [ebp-24h],offset ___xi_z+3Ch (4020F4h) 
                
            char *const d = "safdsfgsdg";
            00401769  mov         dword ptr [ebp-20h],offset ___xi_z+48h (402100h) 
                
            const char* const e = "adsgfsdg";
            00401770  mov         dword ptr [ebp-28h],offset ___xi_z+54h (40210Ch) 
            //可以看出來,這是上面的程序的前五行的代碼的反匯編,前兩行的是賦值,匯編代碼可以看出來,先把靜態(tài)區(qū)中的常量字符串賦值給了eax,然后后eax轉(zhuǎn)給字符數(shù)組的內(nèi)存區(qū),但是后面的三個則是直接把靜態(tài)區(qū)的常量字符串的地址賦值給了指針,如果只賦值給const*指針還好,但是連*const指針也是直接賦值,結(jié)果導(dǎo)致了后面的strcpy(d,"sfd")的靜態(tài)區(qū)內(nèi)存訪問錯誤

            posted on 2009-07-29 10:19 把握命運 閱讀(1241) 評論(0)  編輯 收藏 引用


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


            久久久免费观成人影院| 少妇无套内谢久久久久| 99热精品久久只有精品| 亚洲国产精品一区二区三区久久| 一级做a爰片久久毛片毛片| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久久无码精品亚洲日韩京东传媒| 亚洲AV无码久久精品成人| 狠狠精品久久久无码中文字幕| 狠狠色丁香久久婷婷综合蜜芽五月 | 青青草国产97免久久费观看| 精品国际久久久久999波多野| 久久亚洲精品无码播放| 国产欧美久久一区二区| 久久强奷乱码老熟女网站| 久久夜色撩人精品国产小说| 国产午夜精品理论片久久影视| 久久久久久曰本AV免费免费| 久久综合一区二区无码| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久综合久久鬼色| 久久综合久久综合九色| 无码人妻久久一区二区三区 | 久久综合视频网站| 久久久精品国产亚洲成人满18免费网站| 久久人人爽人人爽人人AV东京热| 中文字幕久久亚洲一区| 一级a性色生活片久久无少妇一级婬片免费放 | 国产精品99久久久久久董美香| 久久久久久午夜成人影院| 亚洲午夜久久久久久噜噜噜| 精品多毛少妇人妻AV免费久久| 亚洲中文字幕久久精品无码喷水 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲欧美成人久久综合中文网 | 99久久精品午夜一区二区| 国产综合久久久久| 久久精品九九亚洲精品天堂| 国产福利电影一区二区三区久久久久成人精品综合 | 欧美亚洲另类久久综合婷婷| 亚洲欧美另类日本久久国产真实乱对白|