2012-06-21 14 views
10

int सूचक को यहाँ नमूना कोड है कि मैं दृश्य स्टूडियो 2010 पर भाग गया है:सी ++: सूचक का प्रारंभ

#include <iostream> 

int main() 
{ 
    int **p(NULL); 
} 

मैं इस त्रुटि मिलती है: error C2059: syntax error : 'constant'

लेकिन अगर मैं int **p(NULL);int **p = NULL; करने के लिए बदल उपरोक्त कोड ठीक संकलित करता है।

इसे जीसीसी (संस्करण: 4.4.2) पर जांचें और दोनों ठीक काम करें। मुझे यहां क्या समझ नहीं आ रहा है?

+0

शायद, आप संकलक का समर्थन नहीं करते हैं। –

+0

संकलक में एक बग लगता है। दिलचस्प! ध्यान दें कि 'int * p (0); 'काम करता है, जबकि' int ** p (0); 'नहीं। – avakar

+1

ध्यान दें कि यदि आप 'typedef int * PINT; 'को परिभाषित करते हैं और फिर' पिनटी * पी (एनयूएलएल) लिखें; 'यह भी ठीक काम करता है। 'int ** पी (एनयूएलएल); 'निश्चित रूप से भी काम करना चाहिए। तथ्य यह है कि यह दिलचस्प नहीं है। – LihO

उत्तर

3

कुलपति ++ संकलक सूचक को सूचक की initializations के बारे में उलझन में लगता है ...

यह उदाहरण

int (**p)(NULL); 

लिए काम करता है ये नहीं

int *i; 
int **p(&i); 
int **o(NULL); 

कर यह काम करता है, हालांकि

int (**p)(&i); 
typedef int* intp; 
intp *o(NULL); 

इत्यादि ... जब भी दो ** मौजूद होते हैं तो पैटर्न प्रारंभ होता है! मुझे लगता है कि एक बग! MSVC टीम की ओर से किसी ने इस बात की पुष्टि करने के लिए

-6

आपको एक वाक्यविन्यास त्रुटि मिलती है: जाहिर है न्यूल परिभाषित नहीं किया गया है। आपको cstdlib शामिल करना चाहिए।

+5

उन्होंने लिखा कि 'int ** p = NULL;' काम करता है। – LihO

0

यह या तो संकलक में एक बग है, या संभवतः आपने कुछ किया है और कुछ और पूछा है। जैसे कि निम्न से सी ++ 11

MSVC10 समर्थन कुछ सुविधाओं,:

int **p1 = nullptr; 
int **p2{}; //initialized to nullptr! 

आप इनमें से किसी भी कोशिश कर सकते हैं। दोनों ठीक हैं।

+2

यह बिल्कुल अलग है .. प्रश्न पर फ़ोकस करें दोस्त :) :) –

+1

@ अश्विंकुमार: ठीक है। मेरा जवाब संपादित किया। – Nawaz

+1

@ नवाज: मैंने जो कुछ भी किया है उसके अलावा मैंने कुछ और नहीं पूछा है :) – omggs

0

लग रहा है, जैसे दृश्य स्टूडियो के साथ दोष, यह काम करता है अगर मैं रूप में अच्छी तरह C++ का उपयोग @http://codepad.org/ निम्नलिखित कोड

int main() 
{  
    int **p(NULL); 
    return 0; 
} 

एक ही काम करता है जी का उपयोग कर संकलन और चलाने के लिए ++ संकलक सक्षम हो सकता है ।

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