Trong C, sự khác nhau giữa con trỏ NULL và con trỏ trỏ tới 0 là gì?Trong C, có sự khác nhau giữa con trỏ NULL và con trỏ trỏ tới 0 không? Nếu có thì sao?
Trả lời
ISO/IEC 9899: tiểu bang TC2 trong 6.3.2.3 Pointers
3 Một số nguyên biểu hiện liên tục với giá trị 0, hoặc như một dàn diễn viên biểu gõ void *, được gọi là một con trỏ constant.55 null) Nếu một null con trỏ hằng được chuyển đổi sang một kiểu con trỏ, kết quả con trỏ, được gọi là một con trỏ null, được đảm bảo để so sánh không công bằng để một con trỏ cho bất kỳ đối tượng hoặc chức năng
các NULL vĩ mô mở rộng đến một hằng số null được xác định được xác định null.
Bất kỳ hai con trỏ null nào sẽ được so sánh bằng nhau.
Có. Tiêu chuẩn quy định rằng NULL
luôn trỏ đến bộ nhớ không hợp lệ. Nhưng nó không nói rằng biểu diễn số nguyên của con trỏ phải là 0. Tôi chưa bao giờ bắt gặp một thực thi mà NULL
khác 0, nhưng đó không phải là bắt buộc theo tiêu chuẩn.
Lưu ý rằng gán chữ số 0
cho con trỏ không có nghĩa là con trỏ giả định biểu diễn số nguyên bằng 0. Điều đó có nghĩa là giá trị con trỏ null đặc biệt được gán cho biến con trỏ.
Đánh giá chữ cái 0
trong ngữ cảnh con trỏ giống hệt với NULL
. Bất kỳ mẫu bit nào trình biên dịch sử dụng để biểu diễn con trỏ NULL
đều bị ẩn.
Câu hỏi thường gặp về comp.lang.c cũ có phần lớn trên con trỏ rỗng và nó đáng để đọc.
Ý tưởng là một con trỏ NULL
bằng cách nào đó phải đại diện cho một vùng nhớ đó là không hợp lệ.
Vì vậy, trong phân đoạn bộ nhớ thấp hơn mã OS được ánh xạ, giá trị 0 đã được sử dụng (để biểu thị con trỏ NULL) vì vùng này trong bộ nhớ không thuộc về chương trình của người dùng nhưng được ánh xạ tới mã OS.
- 1. Sự khác nhau giữa con trỏ tới con trỏ và con trỏ tới mảng?
- 2. Kích thước con trỏ có khác nhau giữa dữ liệu và con trỏ hàm không?
- 3. Con trỏ có trỏ tới LSB hoặc MSB không?
- 4. Con trỏ trỏ tới con trỏ với argv
- 5. Ý nghĩa của con trỏ trỏ tới con trỏ trong C và trong C++ là gì?
- 6. Con trỏ trỏ tới con trỏ số học
- 7. Sự khác nhau giữa con trỏ float và địa chỉ con trỏ int là gì?
- 8. sizeof Con trỏ trỏ tới mảng
- 9. 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?
- 10. Sự khác biệt giữa con trỏ và biến con trỏ là gì?
- 11. Tại sao cblas_dgemm và cblas_sgemm có các kiểu con trỏ khác nhau trong một mảng con trỏ hàm?
- 12. Sự khác biệt giữa * (Con trỏ + Chỉ mục) và Con trỏ []
- 13. Con trỏ trỏ tới một bản đồ
- 14. Sự khác nhau giữa con trỏ trong C++ và kiểu tham chiếu trong C#
- 15. con trỏ trỏ tới mảng cấu trúc
- 16. C: Con trỏ trỏ tới nội tuyến chức năng
- 17. Con trỏ tới mảng chuỗi trong C
- 18. Con trỏ tĩnh có phải là con trỏ mạnh không?
- 19. Có phải con trỏ và mảng nào khác trong C?
- 20. Tại sao Linux sử dụng "con trỏ trỏ tới con trỏ" này cho danh sách?
- 21. Con trỏ có thể tham chiếu và con trỏ tới biến thực được coi là giống nhau không?
- 22. Con trỏ có thể có kích thước khác nhau không?
- 23. Sự khác biệt giữa const. con trỏ và tham chiếu?
- 24. Con trỏ có xấu không?
- 25. C++: Khởi tạo con trỏ đến con trỏ đến int
- 26. Con trỏ không có dấu vết cho các con trỏ cấu trúc trong C
- 27. con trỏ c và mảng
- 28. truyền con trỏ kép C++ tới python
- 29. Con trỏ cho con trỏ là gì?
- 30. Sự khác biệt giữa mảng ký tự và con trỏ
có liên quan: http://c-faq.com/null/machexamp.html – nos
Cũng lưu ý rằng 'int * ptr = 0;' luôn dẫn đến con trỏ null nhờ quy tắc đặc biệt, vì '0' là một cái gọi là "hằng số con trỏ null". Điều này giữ ngay cả khi bạn đang thực hiện một số đặc biệt trong đó một con trỏ null khác với địa chỉ 0. Tuy nhiên, 'int i = 0; int * ptr = (int *) i; 'không nhất thiết dẫn đến một con trỏ null. Vì vậy, bạn sẽ không bình thường gặp phải "một con trỏ trỏ đến địa chỉ 0" ngoại trừ trong một bối cảnh mà nó là một con trỏ null, nhưng tiêu chuẩn cho phép nó. –
@David, trong đoạn thứ hai của bạn, bạn có nghĩa là "không", phải không? Và 'NULL' luôn là giá trị' 0' theo định nghĩa của tiêu chuẩn, có thể là địa chỉ hợp lệ, ví dụ: trong hạt nhân. Vì vậy, một tốt hơn nên phân biệt 'NULL' rõ ràng hơn từ biểu diễn bên trong của một con trỏ null, mà, như bạn nói có thể là một cái gì đó khác nhau. –