01/10/2018, 14:35

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.

Trần Hoàn viết 16:45 ngày 01/10/2018

p++ hay *p++?

Nam Hải Vũ viết 16:39 ngày 01/10/2018

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

Trần Hoàn viết 16:37 ngày 01/10/2018

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

Nam Hải Vũ viết 16:46 ngày 01/10/2018

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

Trần Hoàn viết 16:51 ngày 01/10/2018

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

HK boy viết 16:47 ngày 01/10/2018

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

Này thì p++:

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Nam Hải Vũ viết 16:50 ngày 01/10/2018

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)

Trần Hoàn viết 16:41 ngày 01/10/2018


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

rogp10 viết 16:37 ngày 01/10/2018

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

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

Nam Hải Vũ viết 16:43 ngày 01/10/2018

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 ô 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.

Jacaré Junior viết 16:46 ngày 01/10/2018

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ứ.

Jacaré Junior viết 16:41 ngày 01/10/2018

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

rogp10 viết 16:47 ngày 01/10/2018

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

Trần Hoàn viết 16:44 ngày 01/10/2018

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

Bài liên quan
0