Nó quy định tại /usr/include/stdint.h
:Intptr_t là gì, nó là một kiểu cho số nguyên hay con trỏ?
typedef long int intptr_t;
được nó coi là một kiểu cho số nguyên hoặc con trỏ?
Nó quy định tại /usr/include/stdint.h
:Intptr_t là gì, nó là một kiểu cho số nguyên hay con trỏ?
typedef long int intptr_t;
được nó coi là một kiểu cho số nguyên hoặc con trỏ?
Đây là loại số nguyên đã ký đủ lớn để giữ con trỏ.
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
s/một con trỏ/bất kỳ con trỏ/ – ninjalj
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
Đâ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ặcuintptr_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
.
Trích dẫn từ đâu? – Yotam
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 –
@Chris Lutz, làm cách nào? 'man intptr_t' không bật lên bất cứ thứ gì. –
Tôi tin rằng có một manpage cho 'stdint.h'. Và luôn có Google. –