কম্পিউটার টিউটোরিয়াল

C-এ ডেজিগনেটেড ইনিশিয়ালাইজার (Designated Initializers)


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

  1. একক ডিজিটকে শব্দে রূপান্তরের C প্রোগ্রাম

  2. পয়েন্টার ব্যবহার করে যোগ ও বিয়োগ বের করার C প্রোগ্রাম

  3. C-এ ডেজিগনেটেড ইনিশিয়ালাইজার (Designated Initializers)

  4. C++17-এ ইনিเชালাইজার সহ Else এবং Switch স্টেটমেন্ট