के सदस्य के रूप में फ़ंक्शन पॉइंटर मेरे पास एक संरचना है जो "लम्बाई" नामक फ़ंक्शन के पॉइंटर के साथ होती है जो वर्ण सदस्य की लंबाई वापस कर देगी।)सी संरचना
int length(PString * self) {
return strlen(self->chars);
}
मैं एक समारोह initializeString है (कि एक PString के लिए सूचक रिटर्न:
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
मैं एक PString के लिए सूचक से वर्णों की लंबाई वापस जाने के लिए एक समारोह है
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
यह स्पष्ट है कि मैं अपने पॉइंटर्स के साथ कुछ गलत कर रहा हूं, क्योंकि str->length = &length
लाइन मेरे डीबगर में EXC_BAD_ACCESS सिग्नल का कारण बनती है, जैसा कि 'वापसी स्ट्रेल (स्वयं-> char रों)। क्या किसी को इस समस्या में कोई अंतर्दृष्टि है?
मैं विशेष रूप से प्रारंभ करना चाहता हूं प्रारंभिक स्ट्रिंग() फ़ंक्शन एक पॉइंटर को एक पॉइंटर लौटाता है, और लम्बाई फ़ंक्शन को इनपुट के रूप में एक पीएसटीआरिंग में पॉइंटर का उपयोग करने के लिए करता है। यह सी में प्राथमिक वस्तु-उन्मुख प्रणाली को लागू करने में केवल एक प्रयोग है, लेकिन मेरे पास पॉइंटर्स हेड-ऑन से निपटने का बहुत अधिक अनुभव नहीं है। किसी भी सहायता के लिए धन्यवाद जो आप मुझे दे सकते हैं।
यद्यपि आप कहते हैं कि आप विशेष रूप से एक सूचक वापस जाने के लिए चाहते हैं। इस मामले में, एक संरचना खुद को वापस करना बेहतर है। यह प्रतिलिपि बनाने के लिए एक सस्ता है, और भारी वजन ढेर आवंटन की कोई आवश्यकता नहीं है। स्ट्रिंग ऑब्जेक्ट्स मूल्य-आधारित हैं: उनके पास पहचान (पता) नहीं है, लेकिन उनकी समानता उनकी सामग्री पर आधारित है। आप किसी भी तरह, अपने ओओपी सिस्टम में भी भेदभाव की भावना हो सकती है। –