Con trỏ n++ và *n++

Mọi người ơi,
Em đang học phần con trỏ và em có thắc mắc hai cái này ạ?

#include <iostream>
using namespace std;

int main()
{
	int giatri = 6;
	int *contro = &giatri;
	cout << "Dia chi ban dau: "<< contro << endl; // dia chi cua bien giatri
	
	contro++; // dua den dia chi tiep theo cac nhau 4 bytes theo kieu du lieu
//	*contro++; // dua den dia chi tiep theo
	cout << contro << endl;
	cout << *contro << endl;
	system("pause");
	return 0;
}

Kết quả:

Theo em hiểu thì với:

  • contro++ thì địa chỉ mới sẽ tăng thêm 4 ô nhớ (theo kiểu dữ liệu) => 0x6ffe48
  • còn *contro++ thì nó truy cập vào địa chỉ 0x6ffe44 và trỏ vào ô kế tiếp 0x6ffe45 .Nhưng chương trình nó lại ra kết quả nhau là 0x6ffe48

Em không biết em hiểu thế đúng hay chưa??? Có sai gì ai giúp em với ạ??
Em cám ơn <3

cai p++ là trỏ p đến ô nhớ đứng sau, còn *p++ có thể là *(p++), có nghĩa là đầu tiên nó sẽ thực hiện bước p++, sau đó sẽ lấy giá trị tại ô nhớ đấy. p++ vẫn là 1 con trỏ, còn *p++ là 1 giá trị, * ko thay đổi gì p thì tất nhiêu bạn dùng cout sẽ ko khác gì nhau

Con trỏ đó phải là char*, vì sizeof(char) = 1.

1 Like
#include <iostream>
using namespace std;

int main()
{
	int giatri = 6;
	int *contro = &giatri;
	cout << "Dia chi ban dau: "<< contro << endl;	
        contro++; 
        cout << *contro << endl;
        (*contro)++;
        cout << *contro << endl;
        cout << contro << endl;
return 0;
}

Kết quả của chương trình này là:

Sau khi trỏ vào ô mới nó tạo ra một giá trị rác mới, lẽ ra sau câu lệnh (*contro)++ nó sẽ tăng từ 7339592 lên7339593, sao lại là 28670 hay câu lệnh này cũng lên ô mới rồi khởi tạo giá trị ạ ???
Anh giúp em với

ơ sao, biến giatriintcontro lại char được ạ ???
Em được biết con trỏ phải cùng kiểu với biến nó chỉ vào chứ ạ???

Đó là câu trả lời cho câu hỏi dạng “giả sử” của bạn.

1 Like

Tại em cứ nghỉ là hai cái nó sẽ khác nhau về cách tăng địa chỉ.

Em cứ nghỉ nó sẽ tăng từ ô màu xanh thứ nhất lên ô thứ 2 chứ không phải là tăng từ xanh lên vàng một lần 4 ô như trong hình ạ??

ptr++ theo định nghĩa là phải trỏ vào ô nhớ tiếp theo sau ptr, mà ptr cộng thêm 1 byte cũng là nằm trong ô nhớ định bởi ptr vì 1 ô là 4 byte, vậy làm sao mà đúng :slight_smile:

1 Like

bạn nên đọc lại về các kiểu dữ liệu của biến và kích thước của từng kiểu dữ liệu

1 Like

Em cám ơn ạ <3 Em sẽ nghiên cứu lại.

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