2010-03-03 18 views
5

क्या हम एक शीर्षलेख फ़ाइल में निम्न कार्य में घोषणा कर सकते हैं?सी फ़ंक्शन घोषणा

extern int ap(char[][]); 

क्या हम समारोह में char [] [] का उपयोग कर सकते हैं?

+8

आप इसे क्यों नहीं देखते हैं और पता लगाते हैं। –

+2

@ डैरेन: "इसे आजमाएं" भाषा संरचना की वैधता का परीक्षण करने का शायद ही कभी सही तरीका है। वहाँ "जीसीसी में काम करता है" के काफी पीड़ित हैं (एक उदाहरण के लिए)। – AnT

उत्तर

5

दो आयामी सरणी के लिए, आपको अंतिम आयाम के लिए एक आकार की आपूर्ति करना होगा अन्यथा संकलक को इसका उपयोग कैसे करना है। (यह, हालांकि नाम छोड़ देना ठीक है।)

इस तरह:

extern int ap(char[][10]); 
1

फिर भी, यह फ़ंक्शन घोषणाओं में पैरामीटर नामों को छोड़ने के लिए पूरी तरह मान्य है। जब आप फ़ंक्शन को परिभाषित करते हैं, हालांकि, आपको सरणी को एक नाम देना होगा, और फिर आप इसे इस नाम से संदर्भित कर सकते हैं।

7

नहीं, आप एक सरणी के लिए पिछले N-1 आयाम निर्दिष्ट करने के लिए की जरूरत है।

extern int ap(char[][DIMENSION]); 

अधिक जानकारी के लिए here

1

नहीं, यह अनुमति नहीं है देखो - यह एक अधूरा सरणी प्रकार के सूचक के रूप पैरामीटर घोषित करने के लिए प्रयास करता है।

सरणी प्रकार, एक आकार के साथ पूरा किया जाना चाहिए इस तरह:

extern int ap(char[][10]); 
4

char[][] एक वैध सरणी प्रकार क्योंकि आप एक अधूरी प्रकार की सरणियों नहीं हो सकता है नहीं है, और char[] अधूरा है। मुझे पता है कि यह भ्रमित है क्योंकि आपके पास वास्तव में दो सरणी प्रकार हैं, इसलिए एक ही समस्या के साथ एक और उदाहरण है: char a[3][]। सरणी की लंबाई 3 और तत्व प्रकार char[] है, लेकिन char[] फिर से अपूर्ण है और यह invalid है।

जब आपके पास "बहुआयामी सरणी" होती है, तो आपके पास वास्तव में सरणी होती है। उदाहरण के लिए, typedef int U[3][5];यू स्याही की लंबाई 5 के सरणी की लंबाई 3 की एक सरणी बनाता है और typedef int H[5]; typedef H U[3]; के बराबर है।

कारण आप समारोह पैरामीटर के साथ सबसे बाईं ओर के आयाम को छोड़ सकता है क्योंकि, समारोह मापदंडों केवल, प्रपत्र T[N] की सरणी प्रकार के साथ T* में तब्दील हो रहे हैं, और एन बाहर छोड़ दिया जा सकता है, T* करने के लिए T[] दे रहा है। यह केवल "सबसे ऊपर" या "बाहरीतम" स्तर पर लागू होता है।

तो, इन सभी समारोह घोषणाओं समान हैं:

int f1(int a[3][5]); 
int f2(int a[][5]); 
int f3(int (*a)[5]); 
typedef int T[5]; 
int f4(T a[3]); 
int f5(T a[]); 
int f6(T* a); 

आप, ज़ाहिर है, पैरामीटर नाम ऊपर घोषणाओं में से किसी में एक उन्हें बदले बिना हटा सकते हैं।

संबंधित मुद्दे