01/10/2018, 00:20

Hỏi về cách lấy địa chỉ ô nhớ trong python (khái niệm con trỏ trong C, C++)

E thấy trong C, C++ để lấy địa chỉ của một biến ta dùng & và lấy giá trị thì dùng * . Em đang viết một chương trình cần lấy đến địa chỉ của một mảng. Trong diễn đàn có anh chị nào biết giải đáp hộ em trong python phải dùng như thế nào ạ

Nguyễn Xuân Phúc viết 02:24 ngày 01/10/2018

dùng id() nha
https://docs.python.org/2/library/functions.html#id

Nguyễn Hồng Hào viết 02:36 ngày 01/10/2018

Dùng id()a sẽ lấy được địa chỉ, e muốn ngược lại nữa, tức lấy giá trị khi mình có địa chỉ

Lương Quang Mạnh viết 02:35 ngày 01/10/2018

Mình không biết bạn muốn lấy địa chỉ của một biến làm gì, có thể là cố tình. Tuy nhiên nếu lập trình bình thường hàng ngày mà bạn phải động đến cái này thì tức là bạn đã đi sai hướng rồi đấy.
Dùng hàm id(obj) cũng được nhưng cái nó trả về không thực sự giống địa chỉ trong C/C++ đâu, chỉ có vai trò tương tự thôi. Thậm chí cả khi bạn dùng hex(id(obj)) để chuyển đổi nó sang dạng hexadecimal.
Vì với một số nguyên nhỏ nhỏ gán cho 2 biến khác nhau hoàn toàn có thể có cùng ID (địa chỉ).

Nếu bạn thực sự muốn cách để lấy lại giá trị từ ID thì có nhiều cách, 1 trong những cách đơn giản nhất mình tìm được là đây:

import ctypes
a = 'hello world'
addr = hex(id(a))  # get address of object a, addr is a string

print(ctypes.cast(int(addr, base=16), ctypes.py_object).value)
# print object got from addr
Nguyễn Hồng Hào viết 02:35 ngày 01/10/2018

Em cảm ơn ạ. E đang viết keygen nên cần lấy địa chỉ của ô nhớ

Lương Quang Mạnh viết 02:36 ngày 01/10/2018

Nếu xong rồi bạn có thể mark topic này là solved ;).

Hoàng Huy viết 02:37 ngày 01/10/2018

Cho em hỏi tại sao với một số nguyên nhỏ nhỏ gán cho 2 biến khác nhau hoàn toàn có thể có cùng ID (địa chỉ) ??? Em test rồi nhưng không biết lý do ạ

Mai Anh Dũng viết 02:23 ngày 01/10/2018

bạn cho ví dụ thử, có thể 2 biến đấy compiler tối ưu bằng cách nào đó thành 1 biến chăng.

Bài liên quan
0