01/10/2018, 10:49

Hỏi về long, char C++

long a[10];
void *ptr1=&a[7],ptr2=&a[1];
long d1=(long*)ptr1-(long*)ptr2;
long d2=(char*)ptr1-(char*)ptr2;
long d3=(short*)ptr2-(short*)ptr1;

Thì khi in ra được là d1=6,d2=24,d3=-12.
Các bạn giải thích dùm cái?
Cảm ơn ^^

Dark.Hades viết 12:50 ngày 01/10/2018

void *ptr1=&a[7],ptr2=&a[1];

=> *ptr2

Khi khai báo long a[10]; máy sẽ tạo 10 địa chỉ(được biểu diễn dưới dạng int), và tùy vào x86 hay x64, cấu hình khác nhau, các phần tử sẽ có vị khác nhau, tuy nhiên nó sẽ liên tục.
Việc trừ kia thực chất là trừ vị trí của các phần tử trong mảng => trả về giá trị này khác nhau đối với các kiến trúc máy khác nhau.

wandbox.org

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

#include int main() { long a[10]; void *ptr1=&a[7],*ptr2=&a[1]; long d1=(long*)ptr1-(long*)ptr2; long d2=(char*)ptr1-(char*)ptr2; long d3=(short*)ptr2-(short*)ptr1; std::cout << d1 << d2 <

Bài liên quan
0