Vì vậy, tôi đã xem một vài ví dụ về cách có thể tìm thấy tính cuối của kiến trúc. Giả sử chúng ta có một con trỏ nguyên trỏ đến một kiểu dữ liệu int. Và giả sử giá trị int là 0x010A0B12. Trong một chút kiến trúc cuối cùng, byte ít quan trọng nhất, tức là, 12, sẽ được lưu trữ trong địa chỉ bộ nhớ thấp nhất, phải không? Vì vậy, byte thấp nhất trong một số nguyên 4 byte sẽ là 12.Nhập con trỏ char vào con trỏ nguyên
Bây giờ, trên séc. Nếu chúng ta khai báo một con trỏ char, và gõ cast con trỏ nguyên vào một char * và lưu nó vào p, và in giá trị dereferenced của p, chúng ta sẽ nhận được một đầu mối về endianness của kiến trúc. Nếu đó là 12, chúng ta sẽ rất ít người kết thúc; 01 biểu thị người lớn cuối cùng. Điều này nghe có vẻ thực sự gọn gàng ...
int a = 0x010A0B12;
int *i = &a;
char *p = (char*)i;
printf("%d",*p); // prints the decimal equivalent of 12h!
Vài câu hỏi ở đây, thực sự. Vì con trỏ được đánh máy mạnh, không phải con trỏ ký tự sẽ trỏ tới một kiểu dữ liệu char? Và những gì với in ấn với% d? Chúng ta không nên in với% c, cho nhân vật?
Related: http://stackoverflow.com/questions/34826036/confused-about-pointer-dereferencing?noredirect = 1 & lq = 1 –