Giải thích về con trỏ trong C

tại sao n ở trên ra 260 mà n ở dưới ra 256 ạ, em mới học về con trỏ. Mong mọi người có thể giúp em giải thích chi tiết ạ.

#include <stdio.h>
int main() {
    int n = 260;
    int* p = &n;
    char* pp = (char*) p;
    *pp = 0;
    printf("n = %d\n", n);
    return 0;
}
1 Like

Giả sử bạn chạy code trên máy 32-bit address little-endian. Một số int sẽ có kích thước 4 bytes.
Giá trị: int n = 260; //hex = 0x00000104, binary =0000 0000 0000 0000 0000 0001 0000 0100
thực tế lưu trong 4 bytes của n sẽ là | 04 | 01 | 00 | 00 |
Khi bạn gán con trỏ kiểu char (1 byte) pp vào p, p trỏ vào n, thì nó sẽ trỏ đến ô nhớ đầu tiên | 04 |
Bạn thực hiện phép gán *pp = 0 sẽ chỉ thay đổi 04 thành 00 ở một ô nhớ đó, phần 3 bytes còn lại vẫn không thay đổi.
Kết quả là bạn có | 00 | 01 | 00 | 00 | hay 0x0000100 = 256 hệ decimal

7 Likes

hex = 0x00000104, binary =0000 0000 0000 0000 0000 0001 0000
thì mình hiểu rồi. Nhưng từ sao bạn ra được như vậy | 04 | 01 | 00 | 00 |

Ở trên mình giả sử system là little-endian, nghĩa là cách sắp xếp bộ nhớ theo kiểu LSB


Tham khảo thêm ở: https://en.wikipedia.org/wiki/Endianness

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