Cân nhắc kích thước int
là 4 byte. Luôn &i
sẽ cung cấp cho bạn địa chỉ đầu tiên của 4 byte đó.
Nếu kiến trúc có ít kiểu cuối, thì địa chỉ thấp hơn sẽ có LSB như dưới đây.
+------+------+------+------+
Address | 1000 | 1001 | 1002 | 1003 |
+------+------+------+------+
Value | 5 | 0 | 0 | 0 |
+------+------+------+------+
Nếu kiến trúc là lớn nhất, thì địa chỉ thấp hơn sẽ có MSB như dưới đây.
+------+------+------+------+
Address | 1000 | 1001 | 1002 | 1003 |
+------+------+------+------+
Value | 0 | 0 | 0 | 5 |
+------+------+------+------+
Vì vậy &i
sẽ cho LSB địa chỉ của i
nếu little endian hay nó sẽ cho MSB địa chỉ của i
nếu về cuối lớn
Trong chế độ về cuối nhỏ hỗn hợp cũng có, hoặc ít hoặc về cuối lớn sẽ được chọn cho mỗi công việc tự động.
Dưới logic sẽ cho bạn biết endianess
int i = 5;
void * ptr = &i;
char * ch = (char *) ptr;
printf("%p", ptr);
if (5 == (*ch))
printf("\nlittle endian\n");
else
printf("\nbig endian\n");
Hành vi này sẽ tương tự cho cả hai c
và c++
Đó là hành vi undefined ** **. Cách duy nhất để in 'ptr' là bằng'% p', hoặc bằng cách chuyển nó thành 'intptr_t' và sử dụng macro định dạng in theo. –
Đó không phải là về tính cuối cùng? –