यह भी आप आप एक सूचक है जब एक उदाहरण का उपयोग करने की कोशिश कर रहे हैं होता है, और इसके विपरीत:
struct foo
{
int x, y, z;
};
struct foo a, *b = &a;
b.x = 12; /* This will generate the error, should be b->x or (*b).x */
के रूप में एक टिप्पणी में कहा, इस कोई चला जाता है और typedef
अगर कष्टदायी बनाया जा सकता है सा सूचक, यानी एक typedef में *
भी शामिल है, की तरह तो:
typedef struct foo* Foo;
क्योंकि तो आप लग रहा है कोड है कि यह की तरह, उदाहरणों के साथ काम कर रहा है जबकि वास्तव में इस बिंदु के साथ काम कर रहा है मिल ईआरएस:
Foo a_foo = get_a_brand_new_foo();
a_foo->field = FANTASTIC_VALUE;
नोट कैसे के रूप में यदि ऊपर दिखता है यह a_foo.field
लिखा जाना चाहिए, लेकिन वह विफल हो जाएगा के बाद से Foo
struct के लिए सूचक है। मैं दृढ़ता से typedef
के खिलाफ अनुशंसा करता हूं: सी पॉइंटर्स में एड पॉइंटर्स महत्वपूर्ण हैं, अपने तारों को छिपाएं। उन्हें चमकने दो।
बेहतर उत्तर शीर्ष पर स्वीकार किया जाना चाहिए। –