मैंने एक सी पुस्तक में पढ़ा है कि एक सरणी num[7]
शब्द num
&num[0]
के बराबर है। यह अवधारणा मेरे लिए ठीक काम कर रही थी, लेकिन जब मैंने नीचे दिखाया गया यह कार्यक्रम लिखा था तो मैं फिर से भ्रमित हो गया।दिया गया 'int num [7]', `num`,` और num [0] `,` और num` कैसे भिन्न होते हैं?
#include<stdio.h>
#include<conio.h>
int main()
{
int num[]={21,22,23,24,25,26,27};
int *x,*y,*z;
x=#
y=num;
z=&num[0];
printf("%d %d %d\n",sizeof(x),sizeof(y),sizeof(z));
printf("%d %d %d\n",sizeof(&num),sizeof(num),sizeof(&num[0]));
printf("%d %d %d",*(&num),*(num),*(&num[0]));
getch();
return 0;
}
उत्पादन होता है:
4 4 4
4 28 4
2293536 21 21
num
तो &num[0]
तो क्यों उनके आकार में एक फर्क है के समान है? और यह तीसरा प्रकार का शब्द &num
क्या है? मुझे पता है कि यह एक कचरा मूल्य दिखा रहा है लेकिन क्या इस प्रकार की अवधि कोई समझ में आता है? z=&num[0]
मैं पहले से ही समझता हूं। संकलक x=&num
असाइनमेंट के लिए चेतावनी दिखाता है, लेकिन y=num;
के लिए कंपाइलर में कोई समस्या नहीं है। यदि num
आकार 28
है तो इसे एक टाइपकास्ट के बिना एक पूर्णांक सूचक y
पर क्यों असाइन किया गया?
#include<stdio.h>
#include<conio.h>
int main()
{
int s[4][2]={{1234,56},{1235,57},{1236,58},{1237,59}};
int i
printf ("\n%d %d %d %d %d",sizeof(s[i]),sizeof(&s[i]),sizeof(s),
sizeof(s[0][0]),sizeof(&s));
getch();
return 0;
}
अब उत्पादन
8 4 32 4 4
यहाँ sizeof(s[i])
8
है:
तो मैं 2-डी सरणी पर इस तरह की कोशिश की। क्योंकि s[i]
एक 1-डी सरणी है और इसमें दो तत्व हैं इसलिए यह ठीक है। लेकिन मेरे पास कोई संकेत नहीं है कि &s[i]
और &s
शब्द क्या हैं। और मैं फिर से देख सकता हूं कि s
s[0][0]
के समान नहीं है। मैंने सभी कार्यक्रम चलाने के लिए देव सी ++ 4.9.9.2 संस्करण का उपयोग किया है। मैं इन तीन प्रकार की शर्तों में स्पष्ट होना चाहता हूं।
पढ़ें सी पूछे जाने वाले प्रश्न एक पूरे इस मुद्दे के लिए समर्पित अनुभाग है कि: शुरुआती के लिए http://c-faq.com/aryptr/index.html – AnT
@good सवाल ! दोस्त – niko