2010-12-11 13 views
6
void func(int* param){}; 
func(&123); //error: '&' on constant 
funct(&int(123)) //error 
+0

'int (123) 'अभी भी स्मृति आवंटित नहीं करता है जिसे आप पता ले सकते हैं। यह एक शाब्दिक है, टाइप किया गया 'int'। –

उत्तर

9

यह नहीं है कि पॉइंटर्स कैसे काम करते हैं।

आपको पहले अपने 123 के लिए स्मृति को आबंटित करना चाहिए, इस तरह:

int x = 123; 
func(&x); 
+1

उसने पूछा कि कैसे ढेर पर पॉइंटर बनाने के लिए, ढेर पर नहीं। दूसरे उदाहरण में 'मुक्त (x) की कमी भी है; ' –

4

कि आपको अस्थायी का पता नहीं ले सकते। ऑपरेटर का पता (&) को एक तर्क के रूप में lvalue की आवश्यकता है।

void func(int* param){}; 
int main(){ 
    int k = 123; 
    func(&k); //fine now 
} 
+3

' 123' अस्थायी नहीं है, यह एक शाब्दिक है। – fredoverflow

+4

'int (123)' एक अस्थायी है, 123 नहीं है –

1

कीवर्ड & चाहिए और केवल वास्तविक चर, नहीं ऑपरेंड के लिए लागू किया जाना चाहिए।

2

किसी पूर्णांक चर घोषित करें, और फिर इसे को इंगित:

int* p = &x; 
func(p); 
-1
void func(int* param) 
{ 
    std::cout << * param << std::endl; 
} 

int main(int argc, char** argv) 
{ 
    int a = 123; 
    func(&a); 

    return 0; 
} 
:

int main() { 
    int x = 123; 
    func(&x); 
} 

आप ढेर पर एक सूचक घोषित करने के लिए चाहते हैं, तो एक पूर्णांक-सूचक चर घोषित

0

समस्या यह है कि आप एक रावल्यू का पता लेने की कोशिश कर रहे हैं। इसे एक लाभा बनाएं:

n = 123; 
func(&n); 
संबंधित मुद्दे