/ / एरे इंडेक्स में अनुक्रम बिंदु [डुप्लिकेट] - सी

सरणी सूचकांक में अनुक्रम बिंदु [डुप्लिकेट] - सी

मैंने यह कोड बनाया है

#include <stdio.h>

int main(void)
{
int i = 0;
int arr[20];
while(i < 20)
{
arr[i++] = i;
printf("%dn", arr[i-1]);
}
return 0;
}

ऐसा लगता है कि परिणाम के बारे में उम्मीद है कि ऐसा क्यों कहा जाता है कि आप अपरिभाषित व्यवहार कर सकते हैं

उत्तर:

जवाब के लिए 2 № 1

आप आक्रमण कर रहे हैं अपरिभाषित व्यवहार। आपने उपयोग कर लिया है अनुक्रम अंक, जिसका उपयोग C में अपरिभाषित है।

आप इसे कहें अपेक्षित परिणाम मुद्रित करने के लिए लगता है - यह हो सकता है या यह शायद नहीं, क्योंकि यह अपरिभाषित है। तो यह तथ्य कि आपको अपेक्षित मूल्य मिले, बस शुद्ध भाग्य है।

कुछ चेतावनियाँ प्राप्त करने के लिए, कृपया कोड संकलित करें और चलाएं; यह वास्तव में आपको एक चेतावनी देगा:

चेतावनी: "i" पर संचालन अपरिभाषित हो सकता है [-विकास बिंदु]

लाइव डेमो यहाँ.

इसके अलावा, अगर आप सोच रहे हैं कि यह सिर्फ एक क्यों है चेतावनी और नहीं त्रुटि, तो कृपया ध्यान दें कि कंपाइलर आपके सभी अपरिभाषित व्यवहारों की रिपोर्ट करने के लिए बाध्य नहीं है - इसका काम सिर्फ आपके कोड को संकलित करना है, न कि आपके अपरिभाषित व्यवहार को इंगित करना।


उत्तर № 2 के लिए 1

"यह उम्मीद के मुताबिक काम करता है" अपरिभाषित व्यवहार के लिए संभावित परिणामों में से एक है।

arr[i++] = i; है स्पष्ट रूप से भाषा मानक में अपरिभाषित व्यवहार का एक उदाहरण के रूप में कहा जाता है। जिस क्रम में प्रत्येक उपप्रकार का मूल्यांकन किया जाता है वह अनिर्दिष्ट होता है; यह बाएं से दाएं होने की गारंटी नहीं है i == 1, कोई निम्नलिखित परिणाम संभव हैं:

arr[1] = 1;
arr[1] = 2;
arr[2] = 2;
arr[2] = 1;

उत्तर № 3 के लिए 1

मूल्यांकन आदेश के आधार पर, पहली बार का निष्पादन

     arr[i++] = i;

सेटिंग समाप्त कर सकता है arr[1] सेवा मेरे 1 (यदि एलएचएस का मूल्यांकन पहले किया जाता है) या करने के लिए 0 (यदि आरएचएस का मूल्यांकन पहले किया जाता है)। यदि उन्हें समानांतर में निष्पादित किया जाता है, तो परिणाम कुछ भी हो सकता है।

हम उस लाइन के बाद प्रोग्राम की स्थिति की गारंटी नहीं दे सकते। डॉन "टी इसका उपयोग करें।