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.
Bài liên quan
p++ hay *p++?
code viết p++ mà bác
copy code không cần hiểu à?
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ớichar*
sẽ khácchar
Người ta chỉ cho lỗi sai mà còn cứ vẹo lại.
Này thì p++:
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.
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ọip++
thìp
trỏ đến&i + 1
*p
là dữ liệu của ô nhớ đượcp
trỏ đếnvì
p = &i
nên(*p) ~ i
(*p)++
tương đương vớii++
Bạn có thể kiểm tra bằng cách
(*p)++
rồi xem giá trị củai
Ơ 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ếni
.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.
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é tăng lên 1 slot thôi.
Dữ liệu của
p
là ô nhớ mà nó đang trỏ vào. Nếup++;
thìp
trỏ đến chỗ khác, không phải lài
nữa, khi đó*p ≠ i