久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

C之const和volatile(九)-創新互聯

    在 C 語言中,我們經常會見到 const 和 volatile 這兩個關鍵字,那么我們今天就來介紹下這兩個關鍵字。

在嵐山等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都做網站、網站制作 網站設計制作按需策劃,公司網站建設,企業網站建設,品牌網站制作,成都營銷網站建設,外貿營銷網站建設,嵐山網站建設費用合理。

        先來介紹 const 關鍵字。提起 const 關鍵字,我們可能首先想到的是經過它修飾的變量便是常量了。其實我們這種想法是錯誤的,其實 const 修飾的變量是只讀的,其本質還是變量。它修飾的局部變量是在棧上分配空間的,它修飾的全局變量在全局數據區分配空間(也就是我們平時所說的 read-only data 段),const 只在編譯期有用,在運行期無效。注意:const 修飾的變量不是真的常量,它只是告訴編譯器該變量不能出現在賦值符號的左邊。

        在現代的 C 語言編譯器中,修改 const 全局變量將導致程序崩潰。但是得注意標準 C 語言編譯器不會將 const 修飾的全局變量存儲于只讀存儲區,而是存儲于可修改的全局數據區,其值依然可以改變。


        下來我們來做個示例代碼,驗證下我們所說的,代碼如下:


#include <stdio.h>

const int g_cc = 2;

int main()
{
    const int cc = 1;
    
    int* p = (int*)&cc;
    
    printf("cc = %d\n", cc);
    
    *p = 3;
    
    printf("cc = %d\n", cc);
    
    p = (int*)&g_cc;
    
    printf("g_cc = %d\n", g_cc);
    
    *p = 4;
    
    printf("g_cc = %d\n", g_cc);
    
    return 0;
}

        我們來分析下這個示例代碼,cc 是 const 修飾的局部變量,是分配在棧上的。也就意味著它的屬性是只讀的,其本質還是變量。因而我們可以通過第13行的指針操作來改變它的值,所以第11行和第15行打印出的值分被為 1 和 3;而 g_cc 不同,因為它是個 const 修飾的全局變量,因而會被放在只讀數據段。所以它的值不能被改變。以上的分析是基于現代的 C 語言編譯器,如果是以前的 C 語言編譯器(如 BCC)則不會這樣處理,會將全局變量存儲于可修改的全局數據區,其值依然可以改變。我們分別用現代編譯器和 BCC 編譯器編譯,圖一為現代 C 語言編譯器gcc編譯的結果,圖二為 BCC 編譯的結果。

C之 const 和 volatile(九)

                                        圖一

C之 const 和 volatile(九)

                                                            圖二

        我們可以看到同一份代碼在兩個編譯器上竟然出現了兩個結果,在 gcc 中出現了段錯誤,而在 BCC 中則通過指針順利的改變了由 const 修飾的 g_cc 全局變量變量。由此證明了我們的分析是對的。

        C語言中的 const 使得變量具有只讀屬性,現代 C 編譯器中的 const 將具有全局生命周期的變量存儲于只讀存儲區,const 不能定義真正意義上的常量!!!

        下面我們來分析這個示例代碼,代碼如下:

#include <stdio.h>

const int g_array[5] = {0};

void modify(int* p, int v)
{
    *p = v;
}

int main()
{
    int const i = 0;
    const static int j = 0;
    int const array[5] = {0};
    
    modify((int*)&i, 1);           // ok
    modify((int*)&j, 2);           // error
    modify((int*)&array[0], 3);    // ok
    modify((int*)&g_array[0], 4);  // error
    
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("array[0] = %d\n", array[0]);
    printf("g_array[0] = %d\n", g_array[0]);
    
    return 0;
}

         在這份代碼中,我們發現變量 i 的定義竟然是 int const 的,其實這樣也就相當于 const int i;由于它是局部變量,分配在棧上。因而在被 const 修飾后,就具有只讀屬性,所以還是可以通過指針來改變的。但是變量 j 就不一樣啦,它是由 static 修飾的,其具有全局的生命周期,所以是不能通過指針來改變的,因而第17行代碼將會報錯。第18行我們可以通過指針來改變 array 數組第一個元素,而 g_array 數組是全局的,所以就不能通過指針來改變它的值,而已第19行會報錯。同樣的上面的分析我們是基于現代的編譯器,在 BCC 中不適用。下來我們就來編譯下,看看是否如我們所分析的那樣。

        我們用 gcc 編譯直接報段錯誤,那么我們來把第17和19行注釋掉,再次編譯。

C之 const 和 volatile(九)

        下來我們再用 BCC 來編譯下,結果如下

C之 const 和 volatile(九)

        那么我們發現代碼直接通過,而且值也都改變了。由此可以看出現代的編譯器越來越強大了,已經將 const 的意思表達的更加完善了。下面這張圖更好的闡釋了 const 的意思

C之 const 和 volatile(九)

        那么 const 修飾函數參數又是什么意思呢?它表示在函數體內不希望改變參數的值,const 修飾函數返回值表示返回值不可改變,多用于返回指針的情形。C 語言中的字符串字面量存儲于只讀存儲區,在程序中需要使用 const char* 指針。下來我們來分析個示例,代碼如下:

#include <stdio.h>

const char* f(const int i)
{
    i = 5;
    
    return "hello world";
}

int main()
{
    const char* pc = f(0);
    
    printf("%s\n", pc);
    
    pc[6] = '_';
    
    printf("%s\n", pc);
    
    return 0;
}

        我們可以看出變量 i 是由 const 修飾的,因而第5行的代碼肯定會報錯。在第16行我們想要將中間的那個空格改變成“_”,但是返回的字符字面量是 const 型的,因而不能改變,在這塊也會報錯。我們編譯下看看結果是否如此

C之 const 和 volatile(九)

        我們可以看出這兩行代碼已經報錯。我們注釋掉這兩行代碼,再次編譯,結果如下

C之 const 和 volatile(九)

        我們接下來再來分析下 volatile 關鍵字。它可理解為“編譯器警告指示字”,告訴編譯器必須每次去內存中取變量值,主要修飾可能被多個線程訪問的變量同時也可以修飾可能被未知因數更改的變量。我們在嵌入式的開發中,常常會用的多線程。那么在這個線程里一個變量的值被改變,我們在另一個線程里需要用到它原來的值,但是已經被改變了,這時怎么辦呢?只能去內存中讀取這個變量的值,這時用 volatile 修飾就OK了。在每次需要用到這個變量時,便會去內存中讀取,雖然比較耗時一點,但是是安全的!

        那么我們今天學習了 const 和 volatile 的相關知識,總結如下:1、const 使得變量具有只讀屬性;2、它不能定義真正意義上的常量;3、const 將具有全局生命期的變量存儲于只讀存儲區;4、volatile 強制編譯器減少優化,必須每次從內存中取值。后面我們會繼續對 C 語言的學習。

         歡迎大家一起來學習 C 語言,可以加我QQ:243343083。


另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網站欄目:C之const和volatile(九)-創新互聯
網站鏈接:http://www.js-pz168.com/article46/dhdgeg.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣網站維護品牌網站制作網站內鏈虛擬主機外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
7777精品久久久大香线蕉小说| 亚洲欧洲日夜超级视频| 亚洲电影网站| 日韩一区二区三区视频在线| 国产精品看片你懂得| 日韩成人免费看| 91亚洲精品久久久蜜桃| 日韩精品一线二线三线| 日韩写真欧美这视频| 亚洲女女做受ⅹxx高潮| 激情图片小说一区| 999热视频在线观看| 色综合天天天天做夜夜夜夜做| 欧美成人精品3d动漫h| 亚洲综合男人的天堂| 国产 欧美在线| 无遮挡亚洲一区| 精品久久久久久久久久久院品网| 亚洲一区在线观看视频| 成人黄色a**站在线观看| 无遮挡亚洲一区| 久久色视频免费观看| 天天做天天摸天天爽国产一区| 99麻豆久久久国产精品免费 | 精品成人佐山爱一区二区| 樱花草国产18久久久久| 国产成人亚洲精品狼色在线| 久久青青草原一区二区| 欧美一区二区日韩| 亚洲福利视频三区| 91论坛在线播放| 欧美吞精做爰啪啪高潮| 亚洲天堂成人网| 丁香激情综合国产| 日韩三级电影| 国产偷国产偷精品高清尤物| 美女性感视频久久| 乱一区二区三区在线播放| 日韩午夜三级在线| 日韩国产在线观看| 久久久久综合一区二区三区| 日韩一区二区免费视频| 日韩电影在线免费观看| 国精产品99永久一区一区| 欧美一级高清片| 日本不卡123| 噜噜噜噜噜久久久久久91| 精品国产1区二区| 麻豆成人久久精品二区三区红 | 亚洲裸体xxx| 成人av电影在线观看| 91传媒视频在线播放| 亚洲欧美日韩成人高清在线一区| proumb性欧美在线观看| 欧美在线|欧美| 亚洲国产精品久久一线不卡| 国产99午夜精品一区二区三区 | 日韩欧美亚洲v片| 国产日韩在线不卡| 国产成人aaa| 在线日韩av片| 亚洲国产另类av| 国产精品视频500部| 精品国一区二区三区| 黄色资源网久久资源365| 在线精品日韩| 一区二区三区国产豹纹内裤在线| 波多野结衣精品久久| 精品国产乱码久久久久久图片| 韩国视频一区二区| 色88888久久久久久影院野外| 亚洲激情图片qvod| 国产亚洲精品美女久久久m| ww久久中文字幕| 高清免费成人av| 91麻豆精品91久久久久久清纯 | 99国内精品久久| 日韩一区二区在线看| 九九九久久久精品| 在线视频国内一区二区| 亚瑟在线精品视频| 日韩aⅴ视频一区二区三区| 日韩美女久久久| 国产精品美女久久久久av福利| 亚洲精品一区二区三区四区高清| 国产成人免费视频网站| 欧美精品第1页| 精品一区二区三区久久| 欧美在线观看一区| 日本大胆欧美人术艺术动态| 亚洲午夜在线观看| 亚洲午夜精品17c| 天堂资源在线亚洲视频| 亚洲一区二区三区自拍| 日本一区二区不卡高清更新| 亚洲裸体在线观看| 欧美一区少妇| 亚洲综合视频网| 亚洲7777| 五月天亚洲精品| 在线视频不卡国产| 视频在线观看国产精品| 亚洲一区二区三区加勒比| 亚洲国产精品一区二区www| 亚洲电影网站| 日日摸夜夜添夜夜添亚洲女人| 亚洲国产精品一区二区第四页av| 亚洲一区二区三区四区在线观看 | 精品日韩在线一区| 99这里只有精品| 久久精品人人做| 豆国产97在线| 中文字幕制服丝袜成人av| 久久伊人一区| 亚洲成人第一页| 色久综合一二码| 激情欧美一区二区| 欧美一区二区三区系列电影| 高清beeg欧美| 久久婷婷国产综合精品青草| caoporen国产精品| 中文字幕在线观看一区二区| 免费成人看片网址| 亚洲图片欧美综合| 正在播放一区| 精品一区二区三区视频在线观看| 7777精品伊人久久久大香线蕉 | 国产日韩欧美麻豆| 国产不卡一区二区三区在线观看| 中文字幕在线不卡| 三区精品视频观看| 奇米亚洲午夜久久精品| 7878成人国产在线观看| 成人精品国产一区二区4080| 国产三级三级三级精品8ⅰ区| 好吊色欧美一区二区三区视频| 一区二区三区视频在线看| 一区精品在线| 国产精品资源网站| 国产夜色精品一区二区av| 久久久婷婷一区二区三区不卡| 亚洲小少妇裸体bbw| 欧美日韩综合一区| av亚洲精华国产精华精| 中文字幕在线观看不卡| 亚洲乱码一区二区三区| 国产曰批免费观看久久久| 精品国产凹凸成av人导航| 精品日韩电影| 日本女优在线视频一区二区| 91精品国产福利| 国产精品国产亚洲精品看不卡15| 一区二区三区波多野结衣在线观看| 91久久线看在观草草青青| 懂色av一区二区三区免费看| 国产精品乱码一区二区三区软件| 视频三区二区一区| 国产精品乡下勾搭老头1| 亚洲国产精品精华液ab| 亚洲欧美国产精品桃花| 国产激情精品久久久第一区二区 | 欧美精品一区三区在线观看| 琪琪一区二区三区| 精品国产免费久久| 欧美日韩亚洲在线| 九一九一国产精品| 欧美国产在线观看| 亚洲图片小说在线| 成人午夜视频福利| 亚洲男人的天堂在线aⅴ视频 | 蜜桃视频一区二区三区| 精品国产sm最大网站免费看| 欧洲一区二区日韩在线视频观看免费 | 欧美成人欧美edvon| 免费日韩电影在线观看| 国内欧美视频一区二区| 国产蜜臀av在线一区二区三区| 亚洲一区二区不卡视频| av影院午夜一区| 亚洲成人综合网站| 精品福利视频一区二区三区| 亚洲电影一二三区| 99久免费精品视频在线观看| 亚洲成人午夜电影| 26uuu精品一区二区在线观看| 亚洲看片网站| 97se狠狠狠综合亚洲狠狠| 亚洲成人tv网| 久久久无码精品亚洲日韩按摩| 亚洲日本理论电影| 91影院在线免费观看| 秋霞电影网一区二区| 欧美国产日韩一二三区| 欧美天天综合网| 久久综合入口| 成人高清免费观看| 丝袜诱惑制服诱惑色一区在线观看 | 久久免费午夜影院| 色哟哟国产精品| 国产精品久久久对白|