#include<stdio.h>
int main()
{
int i, j;
int *pi,*pj;
pi=&i;
pj=&j;
printf("pi-pj=%d\n",pi-pj);
return 0;
}
Tôi đã thử mã này trên các trình biên dịch khác nhau, nhưng mỗi khi tôi nhận được kết quả tương tự, ai cũng có thể giúp tôi hiểu tại sao nó giống nhau?Đầu ra của mã C này
Ouput:
pi -pj = 3
Tôi bối rối, như bộ nhớ thông thường sẽ được phân bổ liên tục kế nhau. Vì vậy, nếu chúng ta nói, ngăn xếp hệ thống của chúng tôi đang phát triển xuống dưới và chúng tôi có &i = 0xA
, thì địa chỉ của j(&j) = 0x6
(vì số nguyên là 4 byte). Bây giờ khi chúng tôi đang in sự khác biệt giữa hai giá trị con trỏ int
này, đầu ra phải là "1"
. Nhưng nó đang đến như "3"
. Tại sao vậy?
Chào mừng bạn đến với Stack Overflow! Bạn nhận được kết quả gì? Những gì bạn đã mong đợi? Nếu bạn chính xác hơn về câu hỏi này, chúng tôi có thể cung cấp phản hồi tốt hơn. Ngoài ra, đây có phải là câu hỏi về bài tập về nhà không? Nếu vậy, bạn nên gắn thẻ như vậy. – templatetypedef
Nhận được kết quả tương tự từ các trình biên dịch khác nhau là một vấn đề. Chỉ trích! Tất cả các chương trình của tôi không hoạt động chính xác. – tjm
Xin lỗi, vì sự bất tiện gây ra, tôi đã chỉnh sửa truy vấn của mình, cảm ơn vì đã tranh luận về mô tả sự cố. – Learner