Say chúng ta có đoạn mã sau:C địa chỉ mảng nhầm lẫn
int main(){
int a[3]={1,2,3};
printf(" E: 0x%x\n", a);
printf(" &E[2]: 0x%x\n", &a[2]);
printf("&E[2]-E: 0x%x\n", &a[2] - a);
return 1;
}
Khi biên soạn và chạy kết quả sau:
E: 0xbf8231f8
&E[2]: 0xbf823200
&E[2]-E: 0x2
tôi hiểu kết quả của & E [2] mà là 8 cộng với địa chỉ của mảng, kể từ khi được lập chỉ mục bởi 2 và kiểu int (4 byte trên hệ thống 32 bit của tôi), nhưng tôi không thể tìm ra lý do tại sao dòng cuối cùng là 2 thay vì 8?
Ngoài ra, loại dòng cuối cùng sẽ là gì - một số nguyên hoặc một con trỏ nguyên?
Tôi tự hỏi liệu đó có phải là hệ thống kiểu C (đúc kinda) khiến cho điều này không?
Đây gần như là bản sao của http://stackoverflow.com/questions/759663/pointer-arithmetic-in-c – finnw
Còn về printf ("E: 0x% x \ n", &a); – dashesy