91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言關鍵字const與volatile怎么用

發布時間:2022-04-20 10:37:38 來源:億速云 閱讀:164 作者:iii 欄目:開發技術

今天小編給大家分享一下C語言關鍵字const與volatile怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、const 只讀變量

  • const 修飾的變量是只讀的,本質還是變量

  • const 修飾的局部變量在棧上分配空間

  • const 修飾的全局變量在全局數據區分配空間

  • const 只在編譯期有用,在運行期無用

const 修飾的變量不是真的常量,它只是告訴編譯器該變量不能出現在賦值符號的左邊。

二、const 全局變量的分歧

在現代C語言編譯器中,修改 const 全局變量將導致程序崩潰。

注意:標準C語言編譯器不會將 cons t修飾的全局變量存儲于只讀存儲區中,而是存儲于可修改的全局數據區,其值依然可以改變。

下面看一段代碼:

#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;
}

下面為輸出結果:

C語言關鍵字const與volatile怎么用

上面代碼說明 const 修飾的局部變量可以通過指針修改里面的值,但是 const 修飾的全局變量則不能通過指針來修改里面的值,會發生段錯誤。

三、const 的本質

  • C 語言中的 const 使得變量具有只讀屬性

  • 現代 C 編譯器中的 const 將具有全局生命周期的變量存儲于只讀存儲區(staic 修飾的變量也有全局生命周期,所以用 const 修飾后也存儲于只讀存儲區)

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

下面為輸出結果:

C語言關鍵字const與volatile怎么用

如果把注釋去掉,就會報段錯誤:

C語言關鍵字const與volatile怎么用

這就對應上面說的,如果修改 const 修飾的全局生命周期的變量,程序就會發生崩潰。

四、const 修飾函數參數和返回值

  • const 修飾函數參數表示在函數體內不希望改變參數的值

  • const 修飾函數返回值表示返回值不可改變,多用于返回指針的情形

小貼士:C 語言中的字符串字面量存儲于只讀存儲區中,在程序中需要使用 const char* 指針。

下面看一段const 修飾函數參數與返回值的代碼吧:

#include <stdio.h>
 
const char* f(const int i)
{
    //i = 5;
    
    return "Autumn Ze";
}
 
int main()
{
    const char* pc = f(0);
    
    printf("%s\n", pc);
    
    //pc[6] = '_';
    
    //printf("%s\n", pc);
    
    return 0;
}

下面為輸出結果:

C語言關鍵字const與volatile怎么用

如果把下面的語句去掉注釋

    //pc[6] = '_';
    
    //printf("%s\n", pc);

運行程序就會報錯,不能嘗試去修改只讀變量:

C語言關鍵字const與volatile怎么用

五、volatile 解析

  • volatile 可理解為“編譯器警告指示字”

  • volatile 告訴編譯器必須每次去內存中取變量值

  • volatile 主要修飾可能被多個線程訪問的變量

  • volatile 也可以修飾可能被未知因數更改的變量

如下:

C語言關鍵字const與volatile怎么用

以上就是“C語言關鍵字const與volatile怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐陵市| 枞阳县| 邢台市| 孟州市| 舞阳县| 二连浩特市| 平泉县| 元阳县| 那曲县| 开鲁县| 蓬溪县| 黑河市| 汨罗市| 阿克陶县| 洛扎县| 武陟县| 托克逊县| 兰溪市| 莱西市| 韩城市| 财经| 德惠市| 厦门市| 成武县| 昆山市| 新泰市| 芜湖县| 赣榆县| 新晃| 尼木县| 玉山县| 芮城县| 金坛市| 纳雍县| 石城县| 丰宁| 壤塘县| 如皋市| 仪陇县| 井陉县| 宁都县|