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

'int (123)' n'alloue toujours pas de mémoire dont vous pouvez prendre l'adresse. C'est un littéral, typecasted à 'int'. –

Répondre

9

Ce n'est pas ainsi que fonctionnent les pointeurs.

Vous devez d'abord allouer de la mémoire pour votre 123, comme ceci:

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

Il a demandé comment créer un pointeur sur la pile, pas sur le tas. Le deuxième exemple manque également de 'free (x);' –

4

Vous ne pouvez pas prendre l'adresse d'un temporaire. L'opérateur adresse-de (&) nécessite un lvalue en tant qu'argument.

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

'123' n'est pas un temporaire, c'est un littéral. – fredoverflow

+4

'int (123)' est temporaire, 123 n'est pas –

1

Le mot-clé & doit et ne doit être appliqué aux variables réelles et non opérandes.

2

Déclarer une variable int, puis pointez sur elle:

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

Si vous voulez déclarer un pointeur sur la pile, puis déclarer une variable pointeur 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

Le problème est que vous essayez de prendre l'adresse d'un rvalue. Faites-en une valeur:

n = 123; 
func(&n); 
Questions connexes