शुद्ध एएनएसआई-सी में जेनेरिक सरणी को दोहराना संभव है?शुद्ध एएनएसआई-सी: जेनेरिक सरणी
मेरे पास यह संरचना है जिसमें एक सरणी है (इस समय फ्लोट्स के लिए) और सरणी में उत्परिवर्तन के लिए आकार और क्षमता जैसे कुछ चर।
typedef struct _CustomArray
{
float* array; //the array in which the objects will be stored
int size; //the current size of the array
int capacity; //the max capacity of the array
} CustomArray;
मैं इस का उपयोग struct तो मैं शुद्ध सी में एक सरणी मैं/जहां जोड़ सकते हैं आइटम हटा कर सकते हैं, गतिशील सरणी के आकार को बढ़ाने जब जरूरत आदि सभी चीजें एक "मानक" सरणी करता है, को छोड़कर यह है केवल सी में बनाया गया। और अब मैं इसे बनाना चाहता हूं ताकि जब आप इस स्ट्रक्चर को प्रारंभ करते हैं तो आप उस तत्व के डेटाटाइप को सेट कर सकते हैं, इस पल में यह केवल फ्लोट डेटाटाइप को स्टोर करने में सक्षम है, लेकिन मैं इसे बनाना चाहता हूं ताकि यह किसी को स्टोर कर सके डेटाटाइप/अन्य structs। लेकिन मुझे नहीं पता कि यह भी संभव है या नहीं।
इस समय इस सरणी बनाने के लिए कार्य है:
CustomArray* CustomArray_Create(int initCapacity, /*type elementType*/)
{
CustomArray* customArray_ptr; //create pointer to point at the structure
float* internalArray = (float*)malloc(sizeof(float) * initCapacity); //create the internal array that holds the items
if(internalArray != NULL)
{
CustomArray customArray = { internalArray, 0, initCapacity }; //make the struct with the data
customArray_ptr = &customArray; //get the adress of the structure and assign it to the pointer
return customArray_ptr; //return the pointer
}
return NULL;
}
पैरामीटर के रूप में एक डेटाप्रकार देने के लिए क्या यह संभव है इसलिए मैं उस डेटाप्रकार के लिए स्मृति malloc और गतिशील रूप से एक सरणी में है कि दिया डेटाप्रकार के रूप में यह डाल सकता ?
अग्रिम धन्यवाद,
Marnix वैन Rijswijk
लगता शुद्ध सी में नहीं है आप डेटा प्रकार कि जिस तरह से पारित कर सकते हैं:
आप रुचि रखते हैं, यहाँ कोड है। विषम सरणी सूची का समर्थन करने वाली भाषाओं में देख रहे हैं, उदाहरण के लिए सी #, यह केवल गैर मूल डेटा प्रकारों के लिए काम करता है, जो कक्षाएं हैं और int, float आदि पर नहीं हैं क्योंकि सी वस्तु उन्मुख नहीं है, इसलिए यह बेहद असंभव है कि आपको यह सुविधा मिल जाएगी। –
अंडरस्कोर के साथ पहचानकर्ता शुरू न करें: ऐसे नाम कार्यान्वयन के लिए आरक्षित हैं (कंपाइलर + libc); अंडरस्कोर और ऊपरी मामले का उपयोग करना दोगुना-खराब है: ये नाम किसी भी संदर्भ में आरक्षित हैं क्योंकि यह नई भाषा सुविधाओं का उपयोग करता है (उदाहरण के लिए '_Pragma', '_Complex',' _Bool', ...); एक आसान कामकाज पीछे की ओर अंडरस्कोर का उपयोग करना है, जो उपसर्ग-आधारित नेमस्पेसिंग – Christoph
के साथ भी अच्छा खेलता है साइट पर ऑब्जेक्ट ओरिएंटेड व्यवहार कैसे बना सकता है इस बारे में साइट पर कई सवाल हैं: [ऑब्जेक्ट-ओरिएंटेशन इन सी] (http://stackoverflow.com/q/415452/2509) और [क्या आप सी में ऑब्जेक्ट ओरिएंटेड कोड लिख सकते हैं?] (http://stackoverflow.com/q/351733/2509) और अन्य। आप अपने वांछित परिणाम को 'आकार' के न्यायसंगत उपयोग और लिंक में चर्चा की गई फ़ंक्शन पॉइंटर तंत्र के साथ पूरा कर सकते हैं, लेकिन यह अधिक काम करेगा कि यह लायक है। 'Qsort' और 'bsearch' का इंटरफ़ेस एक समझौता है। – dmckee