Khai báo *& trong C++ có ý nghĩa gì?

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++:

4 Likes

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

5 Likes

Đổ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ỉ :-?

1 Like

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.

4 Likes
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;
2 Likes

Đó 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

10 Likes

Cái này dễ hiểu này :smiley:

2 Likes

Dùng được hay không mới là vấn đề :))

3 Likes

Chăm chỉ thực hành thì biết ngay cái vấn đề dùng được hay không ý mà :smiley:

2 Likes

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.

1 Like

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 ạ ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?