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

'int (123)' vẫn không cấp phát bộ nhớ bạn có thể lấy địa chỉ. Đó là một chữ, được in thành 'int'. –

Trả lời

9

Đó không phải là cách con trỏ hoạt động.

Trước tiên bạn phải phân bổ bộ nhớ cho 123 bạn, như thế này:

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

Ông hỏi làm thế nào để tạo ra con trỏ trên stack, không phải trên đống. Ví dụ thứ hai cũng thiếu 'free (x); ' –

4

Bạn không thể lấy địa chỉ của một tạm thời. Nhà điều hành địa chỉ (&) yêu cầu một đối số lvalue.

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

' 123' không phải là tạm thời, nó là một chữ. – fredoverflow

+4

'int (123)' là tạm thời, 123 không phải là –

1

Từ khóa & phải và chỉ nên được áp dụng cho các biến thực tế chứ không phải toán hạng.

2

Khai báo một biến int, rồi trỏ chuột vào nó:

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

Nếu bạn muốn khai báo một con trỏ trên stack, sau đó khai báo một biến int-con trỏ:

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

Vấn đề là bạn đang cố gắng lấy địa chỉ của một giá trị. Đặt nó thành một lvalue:

n = 123; 
func(&n); 
Các vấn đề liên quan