C90-এ অ্যারে ইনিশিয়ালাইজেশন ফিক্সড অর্ডারে করতে হতো (ইন্ডেক্স ০, ১, ২...)। C99-এ ডেজিগনেটেড ইনিশিয়ালাইজার ফিচার যোগ হয়েছে। এখন র্যান্ডম অর্ডারে ইন্ডেক্স বা স্ট্রাকচার মেম্বার দিয়ে ইনিশিয়ালাইজ করা যায়। এই এক্সটেনশন GNU C++-এ ইমপ্লিমেন্টেড নয়।
অ্যারে ইনিশিয়ালাইজেশন
int arr[6] = {[3] = 20, [5] = 40}; // বা int arr[6] = {[3]20, [5]40};
এটি সমতুল্য: int arr[6] = {0, 0, 0, 20, 0, 40};
রেঞ্জ ব্যবহার করে
int arr[6] = {[2 ... 4] = 10};
এটি সমতুল্য: int arr[6] = {0, 0, 10, 10, 10, 0};
অ্যারে সাইজ না দিলে সর্বোচ্চ ইন্ডেক্স থেকে সাইজ নেয়।
উদাহরণ কোড
#include <stdio.h>
int main() {
int Array[] = {10, 20, 30, [3 ... 9] = 100, [10] = 65, 15, [80] = 50, [42] = 400};
for (int 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]));
return 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
স্ট্রাকচার/ইউনিনের জন্য
#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);
return 0;
}
আউটপুট
x = 78, y = 2.324000, z = f z = r