C90 मानक में हमें सरणियों को निश्चित क्रम में आरंभ करना पड़ता था, जैसे इंडेक्स 0, 1, 2 पर आरंभ करना आदि। C99 मानक से, उन्होंने C में नामित प्रारंभिकरण सुविधा पेश की। यहां हम तत्वों को यादृच्छिक क्रम में आरंभ कर सकते हैं। प्रारंभिकरण सरणी इंडेक्स या स्ट्रक्चर सदस्यों का उपयोग करके किया जा सकता है। यह एक्सटेंशन 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};
हम इस सिंटैक्स का उपयोग करके तत्वों की एक श्रृंखला भी डाल सकते हैं: [first ... last] = value।
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};
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("इस सरणी का आकार: %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 इस सरणी का आकार: 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);
}
आउटपुट
x = 78, y = 2.324000, z = f z = r