復合字面量

2022-09-10 08:15:09 字數 1446 閱讀 1555

所謂字面量就是固定數值的表示。數值和字串型別都有字面量的表達。如:

// 100, 1.23f, "literral" 都是字面量

int x = 100;

float y = 1.23f;

char* s = "literral";

可看到字面構建的同一時候就能夠複製給變數使用。既然是固定數值,那麼在初始化的時候就能夠構建。

那麼復合字面量是幾個意思的復合?

composite 除了有復合的意思。也有組合的概念。

既然組合。必定陣列是直觀的相應。

所以。復合字面量就是陣列字面量的意思。

以前。我們是怎樣定義陣列的。

int arr1   = ;

int arr2[10] = ;

這是最簡單的陣列。 也是一種字面量的定義。然而。這樣的字面量僅僅能在陣列初始化的時候來使用,並不能賦值操作。

int x;

// 正確

x = 100;

int arr[1];

// 錯誤

arr = ;

對。 復合字面量,就是能夠隨時定義,隨時賦值的陣列字面量。兩步構建出來。

1.  形如 (type) 表示須要構建的陣列型別,如: (int), (int*p), 還能是自己定義的型別 (mytype)

2.  跟著 表示陣列內容

int*  intarr1 = (int) ;

int* intarr2 = (int[100]) ;

intarr1 = (int) ;

intarr2 = (int[1]) ;

typedef struct array;

array* arr1 = (array) ;

array* arr2 = (array[1]) , 1};

可見。復合字面量,返回的是乙個指標,指向了構建的陣列字面量。

可以隨時定義出乙個,陣列的字面量指標。可以讓引數傳遞。初始化結構。更加的簡潔。

舉個樣例:

typedef struct  array;

void foo(array* arr)

// 以前的寫法

int data = ;

array arr [1] = ;

foo(arr);

// 如今的寫法

foo((array) , 1 });

表達更為簡潔。 也省去了非常多的賦值操作。非常多時候,構建字面量的陣列不過為了一次函式呼叫的引數傳遞而已。

static array* arr = (array) ,

1};

這個樣例說明了。初始化乙個結構時候的使用方法。

不論什麼乙個複雜的自己定義型別。我們都可以通過復合文字定義出初始化的字面數值。

這在構建一些須要初始化的固定資料結構非常實用處。

復合字面量

復合字面量,是除了符號常量之外的常量,例如 5是int的字面常量,1.2是double的字面常量,a 是char的字面常量,hello 是字串的字面常量。一般來說,字元常量可以方便初始化變數,而且可以用於相應運算。其中較為特殊的還有陣列的復合字面常量。形如 int 2 我們可以通過這樣的字面常量來初...

復合字面量

假設給帶int型別形參的函式傳遞乙個值,要傳遞int型別的變數,但是也可以傳遞int型別常量,對於帶陣列形參的函式,情況不同,可以傳遞陣列,但是沒有等價的陣列常量。c99新增了復合字面量 compound ltra 字面量是除符號常量外的常量,例如,5是int型別字面量,81.3是double型別的...

C語言復合字面量的使用

c99增加的特性,復合字面量 composite literal 一旦熟悉並使用,便會體會到簡潔強大的表達。所謂字面量就是固定數值的表示。數值和字串型別都有字面量的表達。如 100,1.23f,literral 都是字面量 int x 100 float y 1.23f char s literra...