Sự cố khi bạn làm điều gì đó như &&a;
là bạn đang yêu cầu "địa chỉ của địa chỉ a
".
Điều đó không có ý nghĩa. Chúng tôi có thể lấy địa chỉ của a
tốt, nhưng điều đó không cung cấp cho chúng tôi biến mà chúng tôi có thể lấy địa chỉ. Nó chỉ cung cấp cho chúng ta một giá trị con trỏ. Cho đến khi giá trị đó được lưu trữ ở đâu đó, chúng ta không thể lấy các addres của nó.
Nếu bạn có mã như 2+2
, kết quả không có địa chỉ. Nó chỉ là giá trị 4, nhưng nó chưa được lưu trữ ở bất cứ đâu, vì vậy chúng tôi không thể lấy địa chỉ. Khi chúng tôi lưu trữ nó vào biến số int
, chúng tôi có thể lấy địa chỉ của biến đó.
Về cơ bản, vấn đề là sự khác biệt giữa các giá trị và các biến. Giá trị chỉ là một số (hoặc một ký tự hoặc một số dữ liệu khác). Biến là một nơi trong bộ nhớ, nơi một giá trị được lưu trữ. Một biến có một địa chỉ, nhưng một giá trị thì không.
Trong C++ - nói, đó là sự khác biệt giữa giá trị và giá trị. Một rvalue về cơ bản là tạm thời, nó thường là một giá trị được trả về từ một hoạt động khác (chẳng hạn như toán tử &
trong trường hợp của bạn), nhưng giá trị đó chưa được lưu trữ ở bất kỳ đâu.
Khi bạn lưu trữ nó vào một biến, bạn sẽ nhận được một giá trị và các giá trị có địa chỉ bạn có thể thực hiện.
Vì vậy, có, bạn cần hai câu lệnh riêng biệt. Trước tiên, bạn lấy địa chỉ, và sau đó bạn lưu trữ địa chỉ đó ở đâu đó. Và sau đó bạn có thể lấy địa chỉ của "một nơi nào đó" này.
Tại sao bạn nghĩ rằng bạn cần một con trỏ đến con trỏ, trong trường hợp này? – SingleNegationElimination
có thể trùng lặp của [Làm thế nào để con trỏ đến con trỏ làm việc trong C?] (Http://stackoverflow.com/questions/897366/how-do-pointer-to-pointers-work-in-c) –
@Jens Gustedt, điều này không phải là bản sao. Câu hỏi được liên kết hỏi về con trỏ nói chung. Câu hỏi này là về trường hợp cụ thể. –