Continuing the discussion from Tổng Hợp C,C++: Hỗ trợ giải tất cả các bài tập C & C++:
Khai báo *& trong C++ có ý nghĩa gì?
Mình chưa hiểu lắm nhưng so sánh *int &p với int p thì kết quả ntn nhỉ ?
int *& p; khác hoàn toàn với int p; Bạn không thể so sánh được.
int *& p; là reference đến con trỏ kiểu int. Về bản chất, nó là con trỏ
int p; là biến kiểu int
Đổi ở đây là đổi giá trị con trỏ. Vậy địa chỉ con trỏ có đổi không anh? Có nhỉ?
Theo em nhớ thì anh nói con trỏ thực chất là 1 biến bình thường lưu giữ địa chỉ của biến thông thường khác…
Giả sử con trỏ p trỏ tới a= 5, vậy giá trị của nó là địa chỉ của a?
Vậy đổi giá tri con trỏ nghĩa là chuyển địa chỉ của a sang 1 ô nhớ khác còn giá trị a vẫn bằng 5???
Hay là em hiểu sai hướng nhỉ :-?
Em cho ví dụ đổi, anh sẽ giải thích.
Đúng
Đúng
Đổi giá trị của con trỏ có nghĩa là thay vì trỏ tới a, con trỏ trỏ tới ô khác, a vẫn bằng 5. Chứ không phải chuyển địa chỉ của a.
int a =5,b =3;
int * c = &a;
std::cout<<"&a ="<<&a<<std::endl;
std::cout<<"a ="<<a<<std::endl; // a =5
std::cout<<"c ="<<c<<std::endl; // c= &a
*&c = &b;
a = *c;
std::cout<<"*&c = &b ="<<c<<std::endl; // c = &b
std::cout<<"a ="<<a<<std::endl; // a= 3
std::cout<<"&a ="<<&a<<std::endl;
Đó anh. Em đổi thấy giá trị con trỏ c thay đổi chứ địa chỉ con trỏ kiểm tra thế nào? Gán nó = 1 con trỏ khác?
Con trỏ em để ý tới 2 thứ. Một là giá trị nó đang giữ. Và địa chỉ của chính nó.
để lấy được địa chỉ của nó đang giữ:
p
để lấy được giá trị của địa chỉ của nó đang giữ:
*p
để lấy được địa chỉ của chính nó
&p
Vậy *&p trong C có nghĩa là gì? Trước hết &p có nghĩa là địa chỉ của p.
Vậy *(địa chỉ của p) tức là giá trị của địa chỉ của p. Tức là địa chỉ mà p đang giữ.
Suy ra *&p == p
Cái này dễ hiểu này
Dùng được hay không mới là vấn đề :))
Chăm chỉ thực hành thì biết ngay cái vấn đề dùng được hay không ý mà
Cho e hỏi vì sao phép gán
Int a,*p;
Biểu thức *p +1 = a; sai vậy?
Vì *p +1 là một giá trị, nên không thể gàn được. Đừng lầm với *(p+1) là một ô nhớ và gán được.
A Đạt giải thích cực dễ hiểu
Em chào anh ạ, em đang học phần biến tham chiếu và for-each trong C++ mong muốn được anh giải đáp giúp em.
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
int a[] = {1, 2, 3, 4, 5};
for (int& x: a) {
cout << x << endl;
}
return 0;
}
Biến tham chiếu khi được khai báo thì phải khai báo và khởi tạo luôn cho nó một đối tượng, và biến tham chiếu sẽ tham chiếu đến 1 đối tượng duy nhất khi nó được khởi tạo. Vậy khi sử dụng for-each thì làm cách nào để biến tham chiếu này có thể duyệt qua được tất cả các phần tử trong mảng ạ ?