Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Designated Initializers ใน C


ในมาตรฐาน C90 ต้อง initialize อาร์เรย์ตามลำดับคงที่ คือ index 0, 1, 2... ตั้งแต่ C99 มี designated initializers ให้ initialize องค์ประกอบในลำดับสุ่มได้ ใช้ array index หรือ structure members นามสกุลนี้ไม่ได้ implement ใน GNU C++

ถ้าระบุ index และค่า จะเป็นแบบนี้:

int arr[6] = {[3] = 20, [5] = 40}; หรือ int arr[6] = {[3]20, [5]40};

เทียบเท่ากับ:

int arr[6] = {0, 0, 0, 20, 0, 40};

สามารถระบุช่วงได้ด้วย syntax: [first ... last] = value

int arr[6] = {[2 ... 4] = 10};

เทียบเท่ากับ:

int arr[6] = {0, 0, 10, 10, 10, 0};

ถ้าขนาดอาร์เรย์ไม่กำหนด จะได้ขนาดจาก index สูงสุด ดูโค้ดเพื่อเข้าใจดีขึ้น

โค้ดตัวอย่าง

#include <stdio.h> int main() { int Array[] = {10, 20, 30, [3 ... 9] = 100, [10] = 65, 15, [80] = 50, [42] = 400 }; int i; for(i = 0; i < 20; i++) printf("%d ", Array[i]); printf("\nArray[%d] = %d\n", 80, Array[80]); printf("Array[%d] = %d\n", 42, Array[42]); printf("Size of this array: %ld\n", sizeof(Array) / sizeof(Array[0])); }

ผลลัพธ์

10 20 30 100 100 100 100 100 100 100 65 15 0 0 0 0 0 0 0 0 Array[80] = 50 Array[42] = 400 Size of this array: 81

Designated initialization นี้ใช้กับ structure หรือ union ได้ด้วย โดยระบุมาชื่อ member variable พร้อมจุด (.) นำหน้า ในลำดับใดก็ได้

โค้ดตัวอย่าง

#include <stdio.h> struct myStruct { int x; float y; char z; }; int main() { struct myStruct str1 = {.y = 2.324, .z = 'f', .x = 78}; struct myStruct str2 = {.z = 'r'}; printf("x = %d, y = %f, z = %c\n", str1.x, str1.y, str1.z); printf("z = %c\n", str2.z); }

ผลลัพธ์

x = 78, y = 2.324000, z = f z = r