Computer >> Máy Tính >  >> Lập trình >> lập trình C

Bộ khởi tạo được chỉ định trong C

Trong tiêu chuẩn C90, chúng ta phải khởi tạo các mảng theo thứ tự cố định, như khởi tạo chỉ mục ở vị trí 0, 1, 2, v.v. Từ tiêu chuẩn C99, họ đã giới thiệu tính năng khởi tạo được chỉ định trong C. Ở đây chúng ta có thể khởi tạo các phần tử theo thứ tự ngẫu nhiên. Việc khởi tạo có thể được thực hiện bằng cách sử dụng chỉ số mảng hoặc các thành viên cấu trúc. Tiện ích mở rộng này không được triển khai trong GNU C ++.

Nếu chúng ta chỉ định một số chỉ mục và đặt một số giá trị, thì nó sẽ giống như thế này -

int arr[6] = {[3] = 20, [5] = 40}; or
int arr[6] = {[3]20, [5]40};

Điều này tương đương với điều này:

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

Chúng ta cũng có thể đặt một số phạm vi phần tử bằng cú pháp này:[first… last] =value.

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

Điều này tương đương với điều này:

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

nếu kích thước của mảng không được xác định, thì nó có thể nhận kích thước từ vị trí chỉ mục tối đa. Hãy cho chúng tôi xem mã để hiểu rõ hơn.

Mã mẫu

#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]));
}

Đầu ra

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

Khởi tạo được chỉ định này cũng có thể được thực hiện cho các đối tượng kiểu cấu trúc hoặc liên hợp. Đối với chúng, chúng ta có thể khởi tạo các biến bằng cách sử dụng tên của các biến thành viên với một dấu chấm (.) Ở đầu theo bất kỳ thứ tự nào. Để có ý tưởng rõ ràng, vui lòng kiểm tra mã bên dưới.

Mã mẫu

#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);
}

Đầu ra

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