What will be output of following program? #include
Trả lời:
Đáp án đúng: A
Trong chương trình C, khi bạn thực hiện phép trừ giữa hai con trỏ (p - q), kết quả không phải là hiệu số giữa các giá trị mà chúng trỏ tới (trong trường hợp này là 5 và 10). Thay vào đó, kết quả là hiệu số giữa các địa chỉ bộ nhớ mà các con trỏ này trỏ tới, chia cho kích thước của kiểu dữ liệu mà con trỏ trỏ đến. Trong ví dụ này, `p` trỏ đến `a` và `q` trỏ đến `b`. Vì `a` và `b` là các biến `int` được khai báo liền kề nhau trong bộ nhớ (điều này không được đảm bảo, nhưng thường xảy ra), nên địa chỉ của chúng có thể cách nhau một khoảng bằng kích thước của một số nguyên (thường là 4 byte). Tuy nhiên, kết quả `c = p - q;` sẽ là số lượng các phần tử `int` giữa hai địa chỉ đó. Trong trường hợp lý tưởng (và thường gặp), `b` được cấp phát bộ nhớ ngay sau `a`, do đó sự khác biệt về địa chỉ sẽ là kích thước của một số nguyên. Do đó, `c` sẽ là `(address of a - address of b) / sizeof(int)`. Vì `address of a` nhỏ hơn `address of b` (vì `a` được khai báo trước `b`), nên kết quả sẽ là một số âm. Tuy nhiên, vì không có thông tin cụ thể về sự khác biệt địa chỉ, nên ta không thể khẳng định giá trị chính xác của `c`. Trong thực tế, kết quả phụ thuộc vào cách trình biên dịch và hệ điều hành cấp phát bộ nhớ, và có thể khác nhau trên các hệ thống khác nhau. Vì vậy, không có đáp án đúng trong các lựa chọn được đưa ra.