【C语言进阶深度学习记录】五 C语言中变量的属性
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】五 C语言中变量的属性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇文章學習了C語言中的類型轉換,點擊鏈接查看:【C語言進階深度學習記錄】四 C語言中的類型轉換.
文章目錄
- 1 C語言的變量屬性
- 1.1 auto關鍵字
- 1.2 register關鍵字
- 1.3 static 關鍵字
- 1.4 代碼案例分析
- 1.5 extern 關鍵字
- 1.6 代碼案例分析
- 2 總結
1 C語言的變量屬性
- C語言中的變量可以有自己的屬性
- 在定義變量的時候可以加上“屬性”關鍵字
- 屬性關鍵字,指明變量的特有意義
上面的例子中給出了幾個屬性,下面對這些屬性做一些說明。
1.1 auto關鍵字
- auto是C語言中局部變量的默認屬性
- auto表明將被修飾的變量,存儲于棧上
- 編譯器默認所有的局部變量都是auto的
如:
void f(){auto int i; //顯示指定i為auto屬性int j; //局部變量默認屬性是auto的 }1.2 register關鍵字
- register關鍵字指明將局部變量存儲于寄存器中
- register只是請求將局部變量存儲于寄存器中,但是不一定能成功(畢竟寄存器很少)
- register變量必須是CPU寄存器能夠接受的值
- 不能用 & 運算符獲取register變量的地址
如:
#include <stdio.h>register int g_val; //errorint main(){register char var;printf("0x%08X", &var); //errorreturn 0; }1.3 static 關鍵字
-
static關鍵字指明變量的“靜態屬性”
- static 關鍵字修飾的局部變量存儲在程序靜態區,也就是數據區(data或bss)
-
static關鍵字同時具有“作用域限定符”的作用
- static聲明的全局變量,作用域僅在聲明的文件中
- static修飾的函數,作用域僅在聲明的文件中
1.4 代碼案例分析
- 代碼:5-1.c
- 編譯運行結果為(gcc 4.4.5):
可以看到:
- i和k的地址不在一起,i在棧上,k咋數據區
- 函數f1中,r為局部變量,每次調用該函數,r都是一個新的變量,每次都是0
- 函數f2中,r為static變量,為靜態區的變量,在數據區中,所以一直存在,不會消失,每次調用f2函數,r的值都增加一。
1.5 extern 關鍵字
-
extern用于聲明外部定義的函數或者變量
- extern變量在文件的其他地方分配空間
- extern函數在文件的其他地方定義
-
extern “告訴”編譯器用C方式編譯源代碼(比如在C++語言中寫C語言代碼)
1.6 代碼案例分析
- 5-2.c代碼
- g.c
- 編譯:gcc 5-2.c g.c -o lyy.out
- 運行:.lyy.out
運行結果為0;
這個比較簡單就不做分析了
2 總結
- auto變量存儲在棧中,局部變量的默認屬性
- static變量存儲在程序的靜態區,也就是數據區
- register請求變量存儲在CPU 寄存器中(不一定能請求成功)
- extern變量在文件的其他地方分配存儲空間
- extern能夠指示編譯器按照標準C的方式來編譯代碼
總結
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】五 C语言中变量的属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 11 系统修改默认字体
- 下一篇: 【C语言进阶深度学习记录】三十一 数组作