Điều này có vẻ lạ, nhưng trong C (size_t) (void *) 0 == 0 không được đảm bảo bởi thông số ngôn ngữ. Các trình biên dịch được phép sử dụng bất kỳ giá trị nào chúng muốn cho null (mặc dù chúng hầu như luôn sử dụng 0.)Có sự khác biệt nào giữa null và 0 khi gán cho con trỏ trong mã không an toàn không?
Trong C#, bạn có thể gán null hoặc (T *) 0 cho con trỏ trong mã không an toàn.
- Có sự khác biệt nào không?
- (dài) (void *) 0 == 0 (đảm bảo hoặc không nói một cách khác: IntPtr.Zero.ToInt64() == 0)
MSDN có này để nói về IntPtr. Không:
"Giá trị của trường này không tương đương với giá trị rỗng". Vâng, nếu bạn muốn được tương thích với mã C, mà làm cho rất nhiều ý nghĩa - nó sẽ là vô giá trị cho interop nếu nó không chuyển đổi thành một con trỏ null C. Nhưng tôi muốn biết nếu IntPtr.Zero.ToInt64() == 0 có thể có, ngay cả khi IntPtr.Zero nội bộ là một số giá trị khác (CLR có thể hoặc không thể chuyển đổi null thành 0 trong hoạt động truyền)
Không phải là bản sao của this question
Ah yeh, tôi quên rằng mặc định hoạt động trên con trỏ. Đó là một giải pháp tốt đẹp. – Eloff