Tôi hiện đang theo học trong một lớp CS107 mà làm cho các giả định sau:Pointer số học xung quanh đúc
sizeof(int) == 4
sizeof(short) == 2
sizeof(char) == 1
- endianness lớn
giáo sư của tôi cho thấy đoạn mã sau:
int arr[5];
((short*)(((char*) (&arr[1])) + 8))[3] = 100;
Dưới đây là 20 byte đại diện cho arr
:
|....|....|....|....|....|
giáo sư của tôi nói rằng &arr[1]
điểm ở đây, mà tôi đồng ý với.
|....|....|....|....|....|
x
bây giờ tôi hiểu rằng (char*)
làm cho con trỏ chiều rộng của một char (1 byte) thay vì chiều rộng của một int (4 byte).
Những gì tôi không hiểu là + 8
, mà giáo sư của tôi nói điểm ở đây:
|....|....|....|....|....|
x
Nhưng không nên nó chỉ ở đây, vì nó sẽ chuyển tiếp 8 lần so với kích thước của một char (1 byte)?
|....|....|....|....|....|
x
Bạn nói đúng.Viết một số mã để in các giá trị của con trỏ để cho giáo sư thấy rằng bạn đúng. –
Tất cả phụ thuộc vào 'sizeof (int)', mà không nhất thiết là '4'. –
@BlagovestBuyukliev Giáo sư của tôi đã tuyên bố giả sử rằng 'sizeof (int)' là 4 trong suốt thời gian của lớp. Xin lỗi, tôi nên đề cập đến điều đó. – Alexey