C - 字面量



在計算機程式設計術語中,“字面量”是指要賦值給變數的值的文字表示。

在 C 語言中,您可以透過兩種方式將值賦給變數:

  • 使用字面量表示
  • 使用表示式

在 C 語言中,變數的初始化如下所示:

int x = 10;

另一方面,透過為變數賦值表示式的結果來間接初始化變數,如下所示:

int x = 10;
int y = x*2;

在第一種情況下,10 是賦值給“x”的整數字面量。在第二種情況下,“x*2”表示式的結果被賦值給“y”。

因此,字面量是直接在原始碼中表示的某種資料型別的值。通常,字面量用於設定變數的值。

字面量本身並不構成任何程式設計元素。不同的表示法用於表示不同資料型別的數值。

C 語言中的整數字面量

在上面的例子中,10 是一個整數字面量。用數字 0 到 9 表示的正或負整數,沒有小數部分,是**十進位制整數字面量**。它必須在給定作業系統平臺的可接受範圍內。

下面的例子將十進位制字面量賦值給**int**變數:

int x = 200;
int y = -50;

整數字面量也可以帶有後綴,它是“U”(表示無符號)和“L”(表示長整型)的組合。字尾可以是大寫或小寫,並且可以按任何順序排列。

int c = 89U;
long int d = 99998L;

C 語言允許您以八進位制和十六進位制數製表示整數。對於八進位制的字面量表示,請在數字前加 0(確保該數字僅使用八進位制數字,從 0 到 7)。

對於十六進位制字面量,請在數字前加 0x 或 0X。十六進位制數必須包含 0 到 9 和 A 到 F(或 a 到 f)的符號。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   int oct = 025;
   int hex = 0xa1;
   printf("Octal to decimal: %d\n", oct);
   printf("Hexadecimal to decimal: %d\n", hex);
}

輸出

執行此程式碼後,您將獲得以下輸出:

Octal to decimal: 21
Hexadecimal to decimal: 161

現代 C 編譯器也允許您將整數表示為二進位制數,為此您需要新增**0b**字首。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   int x = 0b00010000;
   printf("binary to decimal: %d", x);
}

輸出

執行程式碼並檢查其輸出:

binary to decimal: 16

以下是一些整數字面量的示例:

212      /* valid */
215u     /* valid */
0xFeeL   /* valid */
078      /* invalid: 8 is not an octal digit */
032UU    /* invalid: cannot repeat a suffix */

以下是一些其他各種型別整數字面量的示例:

85       /* decimal */
0213     /* octal */
0x4b     /* hexadecimal */
30       /* int */
30u      /* unsigned int */
30l      /* long */
30ul     /* unsigned long */

C 語言中的浮點字面量

C 語言中的浮點字面量是一個實數,具有整數部分和小數部分,在使用的編譯器可接受的範圍內,並以數字、小數點和可選的指數符號 (e 或 E) 表示。

浮點字面量通常用於在 C 語言中初始化或設定 float 或 double 變數的值。

示例

以下賦值示例使用帶小數點的浮點字面量,小數點將整數部分和小數部分分開:

#include <stdio.h>

int main(){

   float x = 10.55;
   float y = -1.333;
   printf("x and y are: %f, %f", x, y);
}

輸出

您將得到以下輸出:

x and y are: 10.550000, -1.333000

高精度浮點字面量可以使用指數符號“e”或“E”來表示。這稱為**浮點字面量的科學記數法**。

在表示十進位制形式時,必須包含小數點、指數或兩者兼有。在表示指數形式時,必須包含整數部分、小數部分或兩者兼有。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   float x = 100E+4;
   float y = -1.3E-03;
   printf("x: %f\n", x);
   printf("y: %f\n", y);
}

輸出

執行此程式碼時,它將產生以下輸出:

x: 1000000.000000
y: -0.001300

以下是一些浮點字面量的示例:

3.14159     /* valid */
314159E-5L  /* valid */
510E        /* invalid: incomplete exponent */
210f        /* invalid: no decimal or exponent */
.e55        /* invalid: missing integer or fraction */

C 語言中的字元字面量

C 語言中的字元字面量是用單引號括起來的單個字元。請注意,C 語言只識別直引號。因此,使用**'**來構成字元字面量,而不是**‘**)。這是一個例子:

char x = 'I';

字元字面量通常賦值給佔用單個位元組的 char 變數。使用**%c**格式說明符輸出字元。使用**%d**,您將獲得字元的 ASCII 值。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   char x = 'I';
   printf("x: %c\n", x);
   printf("x: %d\n", x);
}

輸出

執行程式碼並檢查其輸出:

x: I
x: 73

C 語言中的轉義序列

C 語言定義了許多轉義序列,它們是一系列以“\”開頭並附加有備選含義的字元。

即使轉義序列由多個字元組成,它也放在單引號內。轉義序列產生單個不可列印字元的效果。例如,**'\n'**是一個轉義序列,它表示換行符,其效果與按下 Enter 鍵相同。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   char x = 'I';
   char y = 'J';
   printf("x: %c\ny: %c", x,y);
}

輸出

在這裡,您將獲得此輸出:

x: I
y: J 

我們將在後面的章節中學習更多關於轉義序列的內容。

字元字面量也可以是字元的 UNICODE 表示。這樣的字面量開頭是**\u**。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   char x = '\u09A9';
   printf("x: %c\n", x);
   printf("x: %d\n", x);
}

輸出

執行此程式碼後,您將獲得以下輸出:

x: ⌐
y: -87

C 語言中的字串字面量

用雙引號括起來的一系列字元構成一個字串字面量。C 語言不提供字串變數。相反,我們需要使用 char 型別的陣列來儲存字串。

示例

請看下面的例子:

#include <stdio.h>

int main(){

   char arr[] = "Hello World";
   printf("arr: %s", arr);
}

輸出

執行程式碼並檢查其輸出:

arr: Hello World

字串字面量可以包含普通字元、轉義序列和 Unicode 字元。例如:

char arr[] = "Hello \
World";

您還可以透過將元素放在花括號 { 和 } 內來表示陣列的字面量。例如

int arr[] = {10, 20, 30, 40};

類似地,花括號也可以用於結構體值的字面量表示。例如:

struct marks {
   int phy;
   int che;
   int math
};
struct marks m1 = {50, 60, 70};

我們將在本教程的後面詳細學習陣列和結構體。

廣告