में अबाधित नाव सरणी typedef मैं इस तरह नाव सरणियों के लिए एक typedef बनाया,:सी
typedef float fooType[];
ताकि मैं घोषणा और इस तरह स्थिर नाव सरणियों आरंभ कर सकते हैं:
fooType myArray = {1.0, 2.0, 3.0}
यही काम करता है ठीक। मैं myArray[2]
कह सकता हूं बिना किसी समस्या के और आमतौर पर मेरे fooType
का उपयोग करना चाहूंगा। मेरे कार्यक्रम के संदर्भ में यह बहुत स्पष्ट है कि fooType
एक सरणी प्रकार है (यह वास्तव में एक विशाल लुकअप टेबल है) यही कारण है कि मैं बस typedef float fooType
नहीं कर रहा हूं।
फिर मैं bar
पर इंगित करने के लिए एक चर का उपयोग और उपयोग कैसे करूं और bar
के तत्वों तक पहुंच सकता हूं? मैं इस तरह एक साधारण चर की घोषणा नहीं कर सकते हैं:
fooType bar = myArray;
invalid initializer
साथ कि त्रुटियों के बाद से; मुझे यह काम करने की उम्मीद नहीं थी क्योंकि संकलक को पता नहीं था कि आवंटित करने के लिए कितनी मेमोरी है।
fooType *bar = myArray;
यह एक चेतावनी देता है:: मैं संकेत के साथ कुछ बातें करने की कोशिश की जब मैं bar[1]
साथ तत्वों का उपयोग initialization from incompatible pointer type
और त्रुटियों .. यह ठीक वाणी, के रूप में मैं इसे बाद प्रकार अब मैच के लिए उम्मीद थी:
fooType *bar = &myArray;
लेकिन invalid use of array with unspecified bounds
के साथ कंपाइलर त्रुटियों के ऊपर जैसा कि मैं bar[1]
कहता हूं।
यह काम करता है:
float *bar = myArray;
float val = bar[3];
लेकिन मैं क्योंकि मैं अपने typedef की पठनीयता कम करने के लिए नहीं करना चाहती।
मुझे एक कट्टरपंथी ओओ दुनिया (जावा) में लंबे समय तक दफनाया गया है, इसलिए मुझे इस स्थिति में सी में बेवकूफ़ों के बारे में समझने की उम्मीद है। अगर कोई सीधा समाधान नहीं है तो मैं कटाई के अनुरूप टाइपिफ़ के उपयोग को बदलने के लिए तैयार हूं। मुझे लगता है कि वहां एक भावना है, और यह जटिल नहीं है।
धन्यवाद
लब्बोलुआब यह है कि तुम क्या है ** नहीं ** सरणियों के लिए ... आप कर सकते हैं typedefs बनाना चाहते हैं, लेकिन फिर आप उन सभी "परेशानियों" सामना करते हैं। उदाहरण के लिए यह बात 'fooType myArray = {1.0, 2.0, 3.0}; fooType बार = myArray; 'का अर्थ है' मेरा आरा फ़्लोट [] = {1.0, 2.0, 3.0}; फ्लोट बार [] = myArray; 'क्या यह पठनीय है? जब आप एक समारोह प्रोटोटाइप जो 'fooType' _output_ तर्क के रूप में लेता है परिभाषित :) एक और" पहेली "है। ('Memset', आदि के समान) – debleek63
अब यह अधिक @ debleek63 स्पष्ट है। धन्यवाद। –