2012-08-28 37 views
5

सी 99 में, मेरी समझ यह है कि दो पॉइंटर्स की तुलना करना जो अनिश्चित व्यवहार में समान परिणामों के भीतर इंगित नहीं करते हैं। एक ए को देखते हुए, एक पॉइंटर p_good जिसे ए के भीतर इंगित करने के लिए जाना जाता है, और एक पॉइंटर p_unknown जो ए के भीतर इंगित कर सकता है या नहीं, क्या परिभाषित व्यवहार के साथ एक पोर्टेबल टेस्ट बनाना संभव है जो निर्धारित करता है कि यह p_good की तुलना करना सुरक्षित है या नहीं p_unknown?सी 99: क्या पोर्टेबल रूप से यह निर्धारित करना संभव है कि दो पॉइंटर्स एक ही कुल के भीतर इंगित करें?

जाहिर है, यह परीक्षण पॉइंटर्स की तुलना करने पर प्रतिबंधों से दूर नहीं हो सकता है।

मुझे संदेह है कि उत्तर 'नहीं' है, लेकिन मुझे अन्यथा दिखाया जाने में खुशी होगी।

+1

'कुल' से आपका क्या मतलब है? और आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? –

+0

क्या आपके पास 'ए' के लिए सूचक है? या केवल दो पॉइंटर्स जो 'ए' में इंगित करते हैं? –

+0

मुझे लगता है कि "नहीं", लेकिन फिर भी, अभ्यास में "x> = y && x

उत्तर

5

आप टिप्पणी की:

एक और तरीका है सवाल इस तरह होगा फ्रेम करने के लिए: एक समग्र 'ए' और एक सूचक पी की परिभाषा को देखते हुए यह सवाल 'का जवाब देने के लिए संभव है भीतर पी बिंदु करता है ए 'अलग समुच्चय

एक ही रास्ता है कि मैं इस व्याख्या कर सकते हैं करने के लिए संकेत की असमानता परीक्षण पर नियम उल्लंघन करने के बिना सार्थक है कि आप किसी भी प्रकार के Aggregate type की एक वस्तु या एक के लिए एक सूचक है। तो इस सवाल का जवाब आसान है:

छद्म कोड:

bool p_in_A = false; 
for (each element in Aggregate A) 
    if (&element == p) 
     p_in_A = true; 

कोई रास्ता नहीं एक आवारा सूचक एक अज्ञात कुल वस्तु के अंतर्गत आता है (या अंक के लिए एक कुल में तत्वों "के बीच") क्या यह बताने के लिए नहीं है।

+0

हां, यह समझ में आता है। मैं सहमत हूं कि अज्ञात कुल के मामले में ऐसा करने का कोई तरीका नहीं है, लेकिन मेरे मामले में मुझे पुनरावृत्त समानता जांच का उपयोग करने के लिए ए के बारे में पर्याप्त जानकारी है। दिलचस्प है कि यूबी से बचने के लिए ओ (आकार (ए)) एल्गोरिदम की आवश्यकता होती है। अज्ञात प्रकार के एग्रीगेट के लिए – acm

+1

@ एसीएम, जहां आप केवल बेस पॉइंटर और आकार को जानते हैं, आपको अपने पॉइंटर्स को 'हस्ताक्षरित char *' पर कास्ट करके बाइट बेस पर यह सब करना होगा। –

+0

@JensGustedt प्रेरक मामले में, मुझे ए के प्रकार पता है, और यह char [] होता है, इसलिए यह कास्टिंग किए बिना काम करेगा। – acm