C語言變量
變量是一個名稱指向一個存儲區域,即程序可以操縱的名稱。在C語言中的每個變量具有特定的類型,它確定的大小和可變的存儲器的布局; 存儲器內存儲的值範圍;以及組操作可以施加到可變。
一個變量名可以由字母,數字和下劃線。它必須以字母或下劃線。大寫和小寫字母是不同的,因為C是區分大小寫的。基於該基本類型在前麵的章節中說明的那樣,有以下基本變量類型:
類型 | 描述 |
---|---|
char | 通常單個字節(一個字節),這是一個整數類型 |
int | 整數的最自然機器存儲的大小 |
float | 單精度浮點值 |
double | 雙精度浮點值 |
void | 表示不存在的類型 |
C語言編程還可以定義各種其他類型的變量,我們將在以後的章節學習,如:枚舉,指針,數組,結構,聯合等,在本章將覆蓋我們隻學基本變量類型。
在C語言定義變量:
一個變量的定義是指,告訴編譯器在哪裡,創建多少存儲變量。變量定義指定一個數據類型,並且包含的該類型如下的一個或多個變量的列表:
type variable_list;
在這裡,類型(type )必須包括char, w_char, int, float, double, bool或任何用戶定義的對象等等一個有效的C數據類型,variable_list可以由用逗號分隔的一個或多個標識符名稱。一些有效的聲明如下所示:
int i, j, k; char c, ch; float f, salary; double d;
int i, j, k; 這一行既聲明並定義了變量 i, j 和k; 這指示編譯器創建一個名為 i, j 和k 的 int類型變量。
變量可以初始化(分配初始值)在它們的聲明時。初始化包括一個等號後跟一個常量表達式如下:
type variable_name = value;
一些實例如下:
extern int d = 3, f = 5; // declaration of d and f. int d = 3, f = 5; // definition and initializing d and f. byte z = 22; // definition and initializes z. char x = 'x'; // the variable x has the value 'x'.
對於冇有初始化定義:具有靜態存儲時間變量隱含NULL初始化(所有字節的值為0);所有其它變量的初始值是不確定的。
在C語言中聲明變量:
變量聲明提供了保證,編譯器,有一個變量存在具有給定類型和名稱,這樣編譯器進行進一步的編輯,而不需要對變量的完整細節。變量聲明有其意義在編譯時止,編譯器需要實際的變量聲明在鏈接程序時。
當使用多個文件變量聲明是有用的,在其中將在連接程序的時候其中一個文件定義的變量。使用extern關鍵字在任何地方來聲明一個變量。雖然可以在C程序中聲明一個變量多次,但它隻能在一個文件,一個函數或代碼塊中定義一次。
例子
試試下麵的例子,其中的變量都在上麵被聲明,但是它們已經確定,主函數中初始化:
#include <stdio.h> // Variable declaration: extern int a, b; extern int c; extern float f; int main () { /* variable definition: */ int a, b; int c; float f; /* actual initialization */ a = 10; b = 20; c = a + b; printf("value of c : %d ", c); f = 70.0/3.0; printf("value of f : %f ", f); return 0; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
value of c : 30 value of f : 23.333334
同樣的概念也適用於函數的聲明,提供一個函數名在其聲明的時間和它的實際定義可以在其他地方給出。例如:
// function declaration int func(); int main() { // function call int i = func(); } // function definition int func() { return 0; }
在C語言中左值和右值:
在C中有兩種表達式:
-
lvalue : 引用一個存儲器位置的表達式被稱為“左值”表達。左值可能顯示為任一左側或賦值的右側。
-
rvalue : 術語右值是指被存儲在存儲器中的某些地址的數據值。右值是不能分配給它的價值,這意味著右值可能出現在賦值的右側而不是左側的表達式。
變量是左值因此可能出現在賦值的左側。數字字麵量右值,因此可能不會被分配,不能出現在左側。下麵是一個有效的語句:
int g = 20;
但是,下麵不是一個有效的聲明,並會產生編譯時錯誤:
10 = 20;