06 C語言變數

2022-06-06 15:33:11 字數 3595 閱讀 9103

變數的本質

變數本質其實是程式可操作的儲存區的名稱

c 中每個變數都有特定的型別,型別決定了變數儲存的大小的範圍,在範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。

變數的名稱可以由字母、數字和下劃線字元組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為 c 是大小寫敏感的。以下是幾種基本的變數型別:

型別描述

char

通常是乙個位元組(八位)。是乙個整數型別。

int對機器而言,整數的最自然的大小。

float

單精度浮點值。單精度的格式,共32位:由1位符號、8位指數、23位小數組成。

double

雙精度浮點值。雙精度共64位:由1位符號、11位指數、52位小數組成

void

表示型別的缺失

c 語言允許定義各種其他型別的變數,比如列舉、指標、陣列、結構、共用體等等,先學習基本變數型別

變數定義的本質其實是告知編譯器在何處建立變數的儲存,以及如何建立變數的儲存(where & how?)。變數定義指定乙個資料型別,幷包含了該型別的乙個或多個變數的列表,如下所示:

type variable_list
type必須是乙個有效的c 資料型別,可以是 char、w_char、int、float、double 或任何使用者自定義的物件(物件本質也是一種資料型別),variable_list 可以由乙個或多個識別符號名稱組成,多個識別符號之間用逗號分隔。如下列出一些有效的宣告的例子:

int    i, j, k;

char c, ch;

float f, salary;

double d;

行 int i, j, k;宣告並定義了變數 i、j 和 k,這指示編譯器建立型別為 int 的名為 i、j、k 的變數。

變數可以在宣告的時候被初始化(即:指定乙個初始值)。「初始化器」由乙個等號,後跟乙個常量表示式組成,如下所示:

type variable_name = value;

列舉一些例項:

extern int a = 1, b = 2;    // a 和 b 的宣告與初始化

int c = 3, d = 5; // 定義並初始化 c 和 d

byte x = 22; // 定義並初始化 x

char y = 'y'; // 變數 y 的值為 'y'

不帶初始化的定義:帶有靜態儲存持續時間的變數會被隱式初始化為 null(所有位元組的值都是 0),其他所有變數的初始值是未定義的。

變數宣告向編譯器保證變數以指定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時(程式執行時?)編譯器需要實際的變數宣告

變數的宣告有兩種情況:

1、一種是需要建立儲存空間的。例如:int a 在宣告的時候就已經建立了儲存空間。

2、另一種是不需要建立儲存空間的,通過使用extern關鍵字宣告變數名而不定義它。 例如:extern int a 其中變數 a 可以在別的檔案中定義的。

除非有extern關鍵字,否則都是變數的定義

宣告和定義的**示例

extern int i; //宣告,不是定義

int i; //宣告,也是定義

嘗試下面的例項,其中,變數在頭部就已經被宣告過了,但是定義與初始化在主函式內:

#include // 在函式的外部定義變數a和b

int a;

int b;

int addnum()

int main()

編譯並執行上面**,結果如下:

result 為: 3

如果需要在乙個原始檔中引用另外乙個原始檔中定義的變數,只需在引用的檔案中將變數加上 extern 關鍵字的宣告即可。

addnum.c 檔案**

#include /*外部變數宣告*/

extern int x;

extern int y;

int addnum()

test.c檔案**
#include /*定義兩個全域性變數*/

int x = 1;

int y = 2;

int addnum();

int main(void)

編譯並執行上面**,結果如下:

result 為: 3

這個概念可能跟我個人的水平有限很菜有關,覺得沒什麼用,像是繞口令,看看了解下就好

c 中有兩種型別的表示式:

1、左值(lvalue):指向記憶體位置的表示式被稱為左值(lvalue)表示式。左值可以出現在賦值號的左邊或右邊

2、右值(rvalue):術語右值(rvalue)指的是儲存在記憶體中某些位址的數值。右值是不能對其進行賦值的表示式,也就是說,右值只能出現在賦值號的右邊,但不能出現在賦值號的左邊。

變數是左值,因此可以出現在賦值號的左邊。數值型的字面值是右值,因此不能被賦值,不能出現在賦值號的左邊。下面是乙個有效的語句:

int g = 20;//左值被賦值
但是下面這個就不是乙個有效的語句,會生成編譯時錯誤:

10 = 20;//右值10不能出現在賦值號的右邊

06 C 名字控制

建立名字是程式設計過程中一項最基本的活動,當乙個專案很大時,它會不可避免地包含大量名字。c 允許我們對名字的產生和名字的可見性進行控制。我們之前在學習c語言可以通過static關鍵字來使得名字只得在本編譯單元內可見,在c 中我們將通過一種通過命名空間來控制對名字的訪問。在c 中,名稱 name 可以...

06 C 函式高階

01函式預設引數 02函式佔位引數 03函式過載 函式的構成包括五部分 int func int a 返回值型別,函式名,引數列表,函式體,返回語句 void型別可以省略 同名函式,引數列表不同,會發生過載 例如 1.intfunc int a 2.int func int a,int b 3.in...

06 C 筆記 常量

1.進製 字首 0x 或 0x 表示十六進製制,0 表示八進位制,沒有字首則表示十進位制。字尾 可以是 u 或 l 的組合,其中,u 和 l 分別表示 unsigned 和 long。字尾可以是大寫或者小寫。2.科學記數法 e3.字串 轉義字元同c 的用法 string a hello,world ...