Khác nhau giữa *p++ và (*p)++

Cái này bạn hỏi hay sao

bạn search độ ưu tiên phép toán trong c/c++ rồi có kết quả!

Mình làm y như bạn:



Giải thích: p chứa địa chỉ của n => số thứ tự Byte mà n được lưu, ví dụ:
n là biến nguyên (int) nên chiếm 4 Byte nên thứ tự là từ 0 đến 3 hoặc từ 1 - 4 ,hoặc … mỗi lần chạy máy sẽ hiển thị khác nhau.
p++ cũng là con trỏ nhưng số thứ tự được lưu sẽ là vị trí Byte đầu tiên của n + thêm 4.
*p là nội dung của p tức là n hay nói cách khác, sau các khai báo của bạn thì không có sự khác nhau giữa *p và n nghĩa là dùng thế nào cũng được.

Cứ nhớ strcpy người ta viết ntn:
while(*dest++ = *source++);
tức là ++ trước rồi mới tới *. Sau mỗi lần chạy destsource trỏ tới ô tiếp theo.

Con trỏ luôn là chẵn byte nhé :slight_smile: trừ phi bạn ép kiểu con trỏ thôi. (misaligned)

1 Like

*p++ tức là con trỏ p chỉ vào ô nhớ tiep theo, mà ô nhớ tiếp theo chưa được gán giá trị nên bạn cout<<*p tức là in ra giá trị. giá trị chưa được gán nên nó báo lỗi. (*p)++ thì là tăng giá trị *p tức n lên 1 thì in ra =6

*p++ thì toán tử ++ tác dụng lên p còn (*p)++ thì toán tử ++ tác dụng lên (*p) . p và (*p) là 2 biến khác nhau

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