2010-12-11 6 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

Он спросил, как создать указатель на стек, а не на кучу. Во втором примере также отсутствует 'free (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, а затем указать на него:

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

Если вы хотите объявить указатель в стек, а затем объявить переменную INT-указатель:

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; 
} 
0

Проблема в том, что вы пытаетесь получить адрес rvalue. Сделать это lvalue:

n = 123; 
func(&n); 
Смежные вопросы