Code con trỏ trỏ đến 1 kí tự ASCII (ngôn ngữ C)

Trong C, viết code: 1 biến con trỏ *p trỏ đến kí tự ‘a’ rồi p++ nhưng khi in *p ra thì nó không hiện 98; anh/chị xem lỗi sai ở chỗ nào?

main()
{
   char i='a', *p;
   p=&i;
   p++;
   printf("%d", *p);
   getch();
}

Xin cảm ơn nhiều.

p++ hay *p++?

1 Like

code viết p++ mà bác

copy code không cần hiểu à?

1 Like

code này tự nghĩ, không cop từ đâu cả

thế thì bạn nghĩ p++ nó khác *p++ ở chỗ nào? Chú ý p có kiểu dữ liệu là char*, phép ++ đối với char* sẽ khác char

1 Like

Người ta chỉ cho lỗi sai mà còn cứ vẹo lại.

Này thì p++:

p++: tăng giá trị của biến con trỏ p (không phải là tăng giá trị lưu trong biến con trỏ p) lên 1
*p++: tác động đến giá trị của số nguyên char kế tiếp sau biến (thường, là biến char) (được trỏ bởi *p)


Sai, quá sai rồi :’(

Giá trị dữ liệu của một con trỏ là địa chỉ ô nhớ mà nó trỏ đến
Khi p đang trỏ đến ô nhớ &i, gọi p++ thì p trỏ đến &i + 1

*p là dữ liệu của ô nhớ được p trỏ đến
p = &i nên (*p) ~ i

(*p)++ tương đương với i++

Bạn có thể kiểm tra bằng cách (*p)++ rồi xem giá trị của i

Ơ mà @noname00 cho hỏi lại. p = &i; là cú pháp của C à?

2 Likes

Chính xác, nó nghĩa là gán p bằng địa chỉ biến i.

Hôm qua, do chưa code quen, nhìn bảng mã ASCII (ở Wiki tiếng Việt) cũng ko quen, tưởng :smiley: ô bên trái là địa chỉ (do còn lơ-tơ-mơ) nên có 1 câu hỏi củ chuối quá; nghe giọng văn của các bác Trần Hoàn & HK có vẻ bực bội (vì hỏi dễ, spam 4rum); các admin có time rảnh thì xóa hộ thread này nhé (chưa tìm ra cách xóa thread). Cảm ơn nhiều.

p là địa chỉ của i thì làm sao ++ được, tham chiếu *p thì mới tăng i lên 1 được chứ.

biến p đó là địa chỉ của biến i thôi, sao mà tăng lên 1 được, nó là 1 số hexa

Được hết nhé :smiley: tăng lên 1 slot thôi.

Dữ liệu của p là ô nhớ mà nó đang trỏ vào. Nếu p++; thì p trỏ đến chỗ khác, không phải là i nữa, khi đó *p ≠ i

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