आपको यह व्यवहार मिलता है, क्योंकि int array [ROW][COLUMN] = {1};
इसका अर्थ "सभी वस्तुओं को एक पर सेट करना" नहीं है। मुझे यह समझाने की कोशिश करें कि यह कदम से कदम कैसे काम करता है।
अपने सरणी को आरम्भ करने का स्पष्ट, अति स्पष्ट तरीका इस प्रकार होगा:
#define ROW 2
#define COLUMN 2
int array [ROW][COLUMN] =
{
{0, 0},
{0, 0}
};
हालाँकि, सी आपको कुछ वस्तुओं को एक सरणी (या संरचना / संघ) में छोड़ने की अनुमति देता है। आप उदाहरण के लिए लिख सकते हैं:
int array [ROW][COLUMN] =
{
{1, 2}
};
इसका मतलब है, पहले तत्वों को 1 और 2 से आरंभ करें, और बाकी तत्व "जैसे कि उनके पास स्थिर भंडारण अवधि थी"। सी में एक नियम है, जिसमें कहा गया है कि स्थिर भंडारण अवधि की सभी वस्तुएं, जो प्रोग्रामर द्वारा स्पष्ट रूप से आरंभिक नहीं हैं, को शून्य पर सेट किया जाना चाहिए।
इसलिए उपर्युक्त उदाहरण में, पहली पंक्ति 1,2 पर सेट हो जाती है और अगली 0,0 के लिए, क्योंकि हमने उन्हें कोई स्पष्ट मान नहीं दिया है।
अगला, सी में एक नियम है जो लक्स ब्रेस स्टाइल की अनुमति देता है। पहला उदाहरण और साथ ही लिखा जा सकता है
int array [ROW][COLUMN] = {0, 0, 0, 0};
हालांकि यह खराब शैली है, लेकिन इसे पढ़ना और समझना कठिन है। लेकिन यह नियम सुविधाजनक है, क्योंकि यह हमें लिखने की अनुमति देता है
int array [ROW][COLUMN] = {0};
जिसका अर्थ है: "पहली पंक्ति में बहुत पहले कॉलम को 0 पर प्रारंभ करें, और अन्य सभी आइटम जैसे कि उनके पास स्थिर भंडारण अवधि थी, अर्थात उन्हें शून्य पर सेट करें।"
इसलिए, यदि आप प्रयास करते हैं
int array [ROW][COLUMN] = {1};
इसका अर्थ है "पहली पंक्ति में बहुत पहले कॉलम को 1 में आरंभीकृत करें और अन्य सभी वस्तुओं को शून्य पर सेट करें"।