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 ạ.

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

^^! 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.

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

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

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 à :smiley:

À, 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)

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

1 Like

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

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

~.~

4 Likes

đã bổ sung nhé…

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

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

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.

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

Cái này tính tay còn được :smiley: 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).

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?