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

'int (123)' aún no asigna memoria de la que puede tomar la dirección. Es un literal, typecasted a 'int'. –

Respuesta

9

Así no funcionan los punteros.

Debe asignar memoria para su primer 123, así:

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

Preguntó cómo crear un puntero en la pila, no en el montón. El segundo ejemplo también carece de 'libre (x);' –

4

No se puede tomar la dirección de un temporal. La dirección del operador (&) requiere un lvalue como argumento.

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

'123' no es temporal, es un literal. – fredoverflow

+4

'int (123)' es un temporal, 123 no es –

1

La palabra clave & obligada y sólo se debe aplicar a las variables reales, no operandos.

2

Declarar una variable int, y luego apunte a él:

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

Si desea declarar un punteroen la pila, a continuación, declarar una variable int-puntero:

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

El problema es que está intentando tomar la dirección de un valor r. Haga que sea un valor l:

n = 123; 
func(&n); 
Cuestiones relacionadas