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.
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++?
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ới char*
sẽ khác char
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
vì 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 à?
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 ô 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ếu p++;
thì p
trỏ đến chỗ khác, không phải là i
nữa, khi đó *p ≠ i