程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中-const,volatile

C語言中-const,volatile

編輯:關於C語言

一、const和volatile分析

1、const修飾變量

# 在c語言中const修飾的變量時只讀的,其本質還是變量

# const修飾的變量會在內存占用空間

# 本質上const只對編譯器有用,在運行時無用

原來const不是真的常量


2、const修飾數組

# 在C語言中const修飾的數組是只讀的

#const修飾的數組空間不可以被改變

const int A[5] = {1, 2, 3, 4, 5}

int *p = (int *)A;

int i = 0;

for(i=0; i<5; i++)

{

p[i] = 5-i;//報錯

}

3、const修飾指針

# const int *p; //p可變,p指向的內容不可變

# int const *p; //p可變,p指向的內容不可變

# int *const p; //p不可變,p指向的內容可變

# const int *const p; //p不可變, p指向的內容不可變

口訣:左數右指

當const出現在*號左邊時指針指向的數據為常量,當const出現在*後右邊時指針本身為常量

const修飾函數參數和返回值

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

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

const int * func()

{

static int count = 0;

count++

return &count;

}

深藏不漏的volatile

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

2、volatile用於告訴編譯器必須每次去內存中去取變量值

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

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


int obj = 10;

int a = 0;

int b = 0;


a = obj;

sleep(100);

b = obj;

以上代碼,編譯器在編譯的時候發現obj沒有被當成左值使用,因此會“聰明”的直接將obj替換成10,而把a和b都賦值為10.


課後思考

# const和volatile是否可以同時修飾一個變量?

# const volatile int i = 0; 這個時候i具有什麼屬性?編譯器如果處理這個變量?

答:可以。這個時候i具有const和volatile的雙重屬性。i變量不可以在編譯過程中被程序代碼修改,同時編譯器不得對i進行優化編譯。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved