कोई ऐसा क्यों करेगा? बेहतर अभी तक यह कैसे काम करता है? मुझे लगता है कि यह किसी भी तरह से केवल पहले सदस्य परिभाषित किए गए तीन संरचनाओं की एक सरणी बना देगा। मुझे सरणी के पहले तत्व को पॉइंटर पॉइंट का एहसास है, और मैं देखता हूं कि यह कैसे काम कर सकता है लेकिन यह कैसे परिभाषित किया गया है मुझे फेंक रहा है! (जीसीसी 4.8.4)संरचना की एक सरणी का प्रारंभ एक तत्व के सभी सदस्यों को शुरू करता है, क्यों?
void do_something(const void *);
typedef struct{
int a;
char b;
int c;
} the_data_t;
int main(int argc, char *argv[])
{
the_data_t my_data[] = {10, 'a', 30};
do_something((const void *)my_data);
}
void do_something(const void *data)
{
printf("data a: %d\ndata b: %c\ndata c: %d\n", ((the_data_t*)data)->a,
((the_data_t*)data)->b, ((the_data_t*)data)->c);
}
आउटपुट
डेटा एक: 10
डेटा ख: एक
डेटा c: 30
भले ही, मैं इसे इस के लिए बदल दिया है।
int main(int argc, char *argv[])
{
the_data_t my_data = {10, 'a', 30};
do_something(&my_data);
}
आपको असली कोड दिखाना चाहिए। यह हो सकता है कि सहायक कार्य को सरणी के साथ काम करने के लिए डिज़ाइन किया गया हो।इसलिए यदि किसी सरणी में एक तत्व भी है तो आपको इसे एक ही संरचना के बजाय सरणी के रूप में घोषित करना चाहिए। –
संरचना के केवल भाग को शुरू करने का कोई तरीका नहीं है, यह सब कुछ या कुछ भी नहीं है। – molbdnilo