2011-06-20 31 views

Trả lời

21

Đây là loại số nguyên đã ký đủ lớn để giữ con trỏ.

+3

Giá trị chỉ ra rằng phần con trỏ giữ meas rằng nó có thể sẽ là một kích thước khác nhau trên nền tảng 32-bit và 64-bit ... – Goz

+1

s/một con trỏ/bất kỳ con trỏ/ – ninjalj

+0

Chỉ cần ra khỏi tò mò: tại sao nó là cần thiết để có phiên bản đã ký và chưa ký của [u] intptr_t? – JohnTortugo

1

Đây là loại số nguyên đã ký được đảm bảo để có thể giữ loại void*.

Và tại sao cũng có [u]intptr_t? Bởi vì:

Bất kỳ con trỏ hợp lệ để làm mất hiệu lực có thể được chuyển đổi sang intptr_t hoặc uintptr_t và lại không có thay đổi về giá trị. Tiêu chuẩn C đảm bảo rằng một con trỏ để void có thể được chuyển đổi hoặc từ một con trỏ đến bất kỳ loại đối tượng nào và ngược lại và kết quả phải là so sánh với con trỏ ban đầu. Do đó, việc chuyển đổi trực tiếp từ con trỏ char * thành số uintptr_t được cho phép trên các triển khai hỗ trợ uintptr_t.

+0

Trích dẫn từ đâu? – Yotam

+1

Bạn đã nhận tôi. Tại đây: https://www.securecoding.cert.org/confluence/display/c/INT36-C.+Converting+a+pointer+to+integer+or+integer+to+pointer –

Các vấn đề liên quan