01/10/2018, 09:31

Hỏi về cách khai báo trong đoạn code

int main(){
   int *p = (int*) 60;
   int *q = (int*)40;
  
  std::cout<<p-q<<endl;     // output is 5
}

Ai giải thích dùm mình khai bái như vậy là gì với ạ.

rogp10 viết 11:35 ngày 01/10/2018

Bạn đang học pointer hay hỏi cho biết vậy thôi?

Nguyen Trong Dung viết 11:39 ngày 01/10/2018

^^! mình lắm đc rõ cái cơ bản về con trỏ r. mình dạo stackoverflow thấy cái này đem lên đây hỏi thôi.

Trần Hoàn viết 11:40 ngày 01/10/2018

Chạy thử thì thấy kết quả là (int)log2(p - q)

Nguyen Trong Dung viết 11:43 ngày 01/10/2018

^^ lần sau test rồi hãng nói nhé, đỡ mất công xóa b à

Trần Hoàn viết 11:42 ngày 01/10/2018

Lần sau nhìn kỹ rồi hẵng gõ nhé bạn, đỡ mất công người ta trả lời xong sửa lại câu hỏi bạn à

Nguyen Trong Dung viết 11:40 ngày 01/10/2018

Trần Hoàn viết 11:45 ngày 01/10/2018

À, không phải là bạn sửa mà là mod sửa cho. Bạn không biết quy cách trình bày nên hỏi bị thiếu dấu *. Sr nha :))


Tất nhiên, như mình đã nói ở trên, chạy thử thì ra (int)log2(p-q)

rogp10 viết 11:44 ngày 01/10/2018
Pointer arithmetic gồm bốn (đếm mới ra 5) con toán: ++, --, +: (nZ x Z) -> nZ, +: (Z x nZ) -> nZ và cuối cùng, mà cũng ít dùng là -: (nZ x nZ) -> Z. Đầu tiên cần nhắc lại chút là nội dung của pointer là một địa chỉ, hay pointer trỏ đến một ô nhớ có địa chỉ, hay ta gọi là slot. Khi ta ++ một pointer thì nên hiểu rằng ta muốn trỏ đến slot liền sau nó. Nếu một slot là 8 byte thì khi ++ một pointer nghĩa là tăng nó lên 8 đơn vị. Ngoài ra địa chỉ phải là bội của size (yêu cầu alignment) nên ta có t…
goneboy viết 11:43 ngày 01/10/2018

bài này nếu để ý kĩ thì thấy cũng ko có gì khó hiểu cả:
p = (int *) 60 (0x0000003C)
q = (int *) 40 (0x00000028)
p - q = 3C - 28 = 14H = 20D
1 biến int kích thước 4 byte --> 20 / 4 = 5

rogp10 viết 11:32 ngày 01/10/2018

C - 8 = 4, 3 - 2 = 1 vậy ra 14 hex chứ sao ra 5 bạn

viết 11:45 ngày 01/10/2018

p, q cách nhau 20 đơn vị,
p, q là con trỏ tới int
1 int có size là 4 đơn vị
=> p, q cách nhau 5 int

~.~

goneboy viết 11:32 ngày 01/10/2018

đã bổ sung nhé…

Nguyen Trong Dung viết 11:48 ngày 01/10/2018

làm sao sếp tính ra được 0x0000003C và …28 thế ạ ?
và 14H là gì? 20D là sao ạ ?

Trần Hoàn viết 11:39 ngày 01/10/2018

3C trong hệ cơ số 16 bằng 60 trong hệ cơ số 10
hay 3CH = 60D

goneboy viết 11:41 ngày 01/10/2018

D: Decimal (Hệ thập phân), H: Heximal (Hệ thập luc phân). Cách chuyển đổi giữa các hệ này, bạn có thể tham khảo trên mạng hoặc dùng máy tính cá nhân, calculator trong máy cũng được.

rogp10 viết 11:35 ngày 01/10/2018

Chữ h với d đó nên viết thường để phân biệt với D của hex. Còn h là hexadecimal (6 + 10)

Cái này tính tay còn được chịu khó đổi từng chữ số ra dec là tính được. Khô máu thì học bảng thập lục chương (15 * (16-1) = 225 slot).

Bài liên quan
0