मैं इस कोड को "अजीब" व्यवहार पर ठोकर मारने पर अपने कोड को डीबग करने का प्रयास कर रहा था।मैट्रिक्स घोषणा पर शून्य-भर नहीं
#include <stdio.h>
#define MAX 20
int main(void) {
int matrix[MAX][MAX] = {{0}};
return 0;
}
अगर मैं return 0;
लाइन पर एक ब्रेकपाइंट सेट और मैं मैट्रिक्स पूरी तरह से शून्य से भरा नहीं है कोड :: ब्लाकों के साथ स्थानीय चर को देखो। पहली पंक्ति है, लेकिन शेष सरणी में केवल यादृच्छिक जंक है।
मैं जानता हूँ कि मैं एक डबल for
मैन्युअल शून्य करने के लिए सब कुछ प्रारंभ करने में पाश कर सकते हैं, लेकिन C
मानक {{0}}
प्रारंभकर्ता साथ शून्य करने के लिए इस मैट्रिक्स को भरने के लिए नहीं होना चाहिए था?
शायद क्योंकि यह एक लंबा दिन रहा है और मैं थक गया हूं, लेकिन मैं शपथ ले सकता था कि मुझे यह पता था।
मैं अलग मानकों के साथ संकलित करने के लिए कोशिश की है (कोड के साथ :: ब्लाकों बंडल gcc
संकलक): -std=c89
, -std=c99
, std=c11
लेकिन यह ही है।
क्या गलत है इसके बारे में कोई विचार? क्या आप इसे मुझे समझा सकते हैं?
संपादित करें: मैं विशेष रूप से {{0}}
प्रारंभकर्ता के बारे में पूछ रहा हूं।
मैंने हमेशा सोचा है कि यह सभी कॉलम और सभी पंक्तियों को शून्य पर भर देगा।
संपादित 2: मुझे विशेष रूप से Code::Blocks
और इसके बंडल GCC
के साथ परेशान किया गया है। अन्य टिप्पणियों का कहना है कि कोड विभिन्न प्लेटफार्मों पर काम करता है। लेकिन यह मेरे लिए क्यों काम नहीं करेगा? :/
धन्यवाद।
अच्छी तरह से इस उत्तर का कहना है कि आप इसे कर रहे हैं सही http://stackoverflow.com/a/1688758/1339987 – djechlin
2- का उपयोग करना आयामी सरणी कुछ ऐसा है जो लोग स्कूल में करना पसंद करते हैं, लेकिन व्यवहार में यह अक्सर इसके लायक होने की तुलना में अधिक परेशानी का कारण बनता है। क्यों न केवल एक आयामी सरणी का उपयोग करें, जहां पहले MAX तत्वों को पहली पंक्ति माना जाता है, अगले MAX तत्व हैं दूसरी पंक्ति, आदि मैट्रिक्स [पंक्ति * एनसीओएलएस + कोल] द्वारा अव्यवस्था; उस स्थिति में, आप इसे अधिक आसानी से मैट्रिक्स [एनसीओएलएस * एनआरडब्ल्यूएस] = {0}; – Dmitri
@ दमित्री के रूप में शुरू कर सकते हैं क्योंकि आपको पहले मानना है MAX तत्व पहली पंक्ति हैं, गणित करें, अधिक गणित के साथ सम्मान - मेरा मानना है कि आपने अपने प्रश्न का उत्तर दिया: पी – djechlin