C語言 - 變數



變數只不過是程式可以操作的儲存區域的名稱。C語言中的每個變數都有一個特定的型別,該型別決定變數記憶體的大小和佈局;可以儲存在該記憶體中的值的範圍;以及可以應用於該變數的操作集。

為什麼我們在 C 語言中使用變數?

C語言中的變數是使用者為計算機記憶體中某個特定位置分配的名稱,該位置是大量可隨機訪問的位置的集合,每個位置可以容納單個位。記憶體中的每個位置都由一個唯一的地址標識,該地址以二進位制(或為方便起見使用十六進位制)格式表示。

由於透過引用其二進位制形式的位置來儲存和處理記憶體中的資料非常麻煩,因此像 C 這樣的高階語言允許使用使用者定義的名稱或變數來標識這些位置。

您可以找到合適的助記符識別符號併為其賦值,而不是標識一個空閒記憶體位置併為其賦值。C編譯器將選擇一個合適的位置並將其繫結到您指定的識別符號。

C語言變數的命名約定

變數名必須以字母(大寫或小寫)或下劃線 (_) 開頭。它可以包含字母(大寫或小寫)、數字和下劃線字元。C語言中的變數名不能包含其他字元。

C語言中的變數名區分大小寫。例如,“age”與“AGE”不同。

ANSI 標準認可變數名長度為 31 個字元。儘管您可以選擇具有更多字元的名稱,但只識別前 31 個字元。使用描述性變數名來反映其意圖儲存的值被認為是一種良好的實踐。避免使用可能導致混淆的非常短的變數名。

C 是一種靜態型別語言。因此,必須在變數名稱之前宣告變數的資料型別。變數可以在函式內(區域性變數)或全域性宣告。可以在單個語句中宣告多個相同型別的變數。

示例

根據上述規則和約定,以下是一些有效和無效的變數名

int _num = 5;        // valid integer variable
float marks = 55.50; // valid float variable
char choice = '0';   // valid char variable

// invalid variable name
// cannot use "-"
int sub-1 = 35;      

//invalid; must have data type
avg = 50;            

// invalid; name can be used for 
// declaration only once in a function
int choice = 0;

// Valid integer name
int sal_of_employee = 20000; 

// Valid because all are of same type
int phy, che, maths; 

// error because variables of 
// different types in same statement
int sal, float tax;

在 C 語言中,變數可以儲存屬於其識別的任何型別的資料。因此,變數的型別數量與C語言中的資料型別數量一樣多。

序號 型別和描述
1

char

通常是一個八位位元組(一個位元組)。它是一種整數型別。

2

int

機器最自然的整數大小。

3

float

單精度浮點值。

4

double

雙精度浮點值。

5

void

表示型別缺失。

C程式語言還允許定義各種其他型別的變數,例如列舉型別、指標型別、陣列型別、結構體型別、聯合體型別等。在本節中,我們只學習基本變數型別。

C語言中的變數定義

變數定義告訴編譯器在哪裡以及為變數建立多少儲存空間。變數定義指定資料型別,幷包含一個或多個該型別變數的列表,如下所示:

type variable_list;

這裡,type必須是有效的 C 資料型別,包括 char、w_char、int、float、double、bool 或任何使用者定義的物件;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;

示例:變數定義和初始化

請看以下示例

// declaration of d and f
extern int d = 3, f = 5;     

// definition and initializing d and f
int d = 3, f = 5;            

// definition and initializes z 
byte z = 22;

// the variable x has the value 'x'
char x = 'x';               

對於沒有初始化器的定義:具有靜態儲存期的變數隱式初始化為 NULL(所有位元組的值均為 0);所有其他變數的初始值未定義。

C語言中的變數宣告

根據 ANSI C 標準,所有變數都必須在開頭宣告。不允許在第一個處理語句之後宣告變數。儘管 C99 和 C11 標準修訂已刪除此規定,但它仍然被認為是一種良好的程式設計習慣。您可以宣告一個變數以便稍後在程式碼中為其賦值,或者您可以在宣告時初始化它。

示例:變數宣告

// declaration with initialization
int x = 10; 

// declare first and assign later       
int y;             
y = 20;

// define and initialize two variables
int d = 3, f = 5;

// the variable x has the value 'x'
char x = 'x';      

一旦聲明瞭某種型別的變數,就不能為其分配任何其他型別的變數值。在這種情況下,C編譯器將報告型別不匹配錯誤。

變數宣告向編譯器保證存在具有給定型別和名稱的變數,以便編譯器可以在無需有關變數的完整詳細資訊的情況下繼續進行進一步的編譯。變數定義僅在編譯時具有其含義,編譯器在連結程式時需要實際的變數定義。

當您使用多個檔案並在其中一個檔案中定義變數時,變數宣告很有用,這些變數在連結程式時可用。您將使用關鍵字“extern”在任何地方宣告變數。儘管您可以在 C 程式中多次宣告變數,但它只能在一個檔案中、一個函式中或一段程式碼中定義一次。

示例

嘗試以下示例,其中變數已在頂部宣告,但已在 main 函式內定義和初始化:

#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 \n", c);

   f = 70.0/3.0;
   printf("value of f : %f \n", 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語言中有兩種表示式

  • 左值表示式
  • 右值表示式

C語言中的左值表示式

引用記憶體位置的表示式稱為“左值”表示式。左值可以出現在賦值運算子的左側或右側。

C語言中的變數是左值,因此它們可以出現在賦值運算子的左側。

C語言中的右值表示式

術語“右值”指的是儲存在記憶體某個地址處的資料值。“右值”是一個不能為其賦值的表示式,這意味著右值可以出現在賦值運算子的右側,但不能出現在左側。

數字字面量是右值,因此它們不能被賦值,也不能出現在左側。

讓我們看一下以下有效和無效的語句

// valid statement
int g = 20; 

// invalid statement 
// it would generate compile-time error
10 = 20;    

C語言中的變數可以根據以下引數進行分類

  • 資料型別 - int、float、char 或 struct 型別。

  • 作用域 - 全域性變數或區域性變數。

  • 儲存型別 - 自動、靜態、暫存器或外部。

我們將在本教程的後面學習區域性和全域性型別以及儲存型別。

廣告