नीचे कोड स्निपेट है। मैं जानना चाहता हूं कि line no. 17
टाइपकास्टिंग सी में वैध और उचित है या नहीं?पॉइंटर को एक सरणी में पॉइंटर पर
#include <stdio.h>
typedef int twoInts[2];
void print(twoInts *twoIntsPtr);
void intermediate (twoInts twoIntsAppearsByValue);
int main() {
twoInts a;
a[0] = 0;
a[1] = 1;
print(&a);
intermediate(a);
return 0;
}
void intermediate(twoInts b) {
print((int(*)[])b); // <<< line no. 17 <<<
}
void print(twoInts *c){
printf("%d\n%d\n", (*c)[0], (*c)[1]);
}
इसके अलावा
, जब मैं परिभाषा intermediate
void intermediate(twoInts b) {
print(&b);
}
को मैं चेतावनी नीचे हो रही है, जबकि संकलन और ओ/p उचित नहीं है बदल जाते हैं।
1.c:17:11: warning: passing argument 1 of print from incompatible pointer type
print(&b);
^
1.c:5:6: note: expected int (*)[2] but argument is of type int **
void print(twoInts *twoIntsPtr);
मेरी समझ के अनुसार, सरणी funtion बहस में pointer to int
को खस्ताहाल है। सही कारण क्या है?
मुझे बस इसे जोड़ने दें: 'शून्य प्रिंट (दो इंच * दो इंट्सपीआरटी);' 'शून्य प्रिंट (int (* twoIntsPtr) [2]); या दूसरे शब्दों में, सरणी को छिपाएं और typedefs के पीछे पॉइंटर्स। – this
समस्या का सबसे अच्छा और उचित समाधान, वास्तव में किसी टाइपिफ़ के पीछे एक सरणी को छिपाना नहीं है। फिर आप प्रोग्राम को विस्मरण करने के लिए प्रोग्राम को खराब करने की आवश्यकता के बिना सादा 'int * 'पॉइंटर्स का उपयोग कर सकते हैं। – Lundin
मैं कहूंगा कि 'प्रिंट ((दो इंच *) &b);' करना चाहिए। – alk