2012-05-05 31 views
12

Tôi tự hỏi nếu không:Hành vi của trình biến đổi `p` với con trỏ` NULL` là gì?

void *ptr = NULL; 
printf("%p\n", ptr); 

Sẽ luôn mang đến cho (nil) đầu ra?

Điều đó có phụ thuộc vào việc triển khai thư viện chuẩn hay là đặc điểm kỹ thuật tiêu chuẩn C99?

+5

Tôi nghĩ rằng tiêu chuẩn không xác định đầu ra của printf cho định dạng '% p' là gì. Đó là vào việc thực hiện. –

+0

Tôi làm lại câu hỏi này vì câu trả lời sai. Đây là một vấn đề cho một câu hỏi ~ 5000 lượt xem. – Stargateur

+0

@Stargateur: trên đường đến huy hiệu necromancer? – chqrlie

Trả lời

18

Trên hệ thống của tôi, nó mang lại (null) vì vậy tôi đoán đó là triển khai được xác định. Tổng quát hơn, mọi thứ %p in được thực hiện xác định:

7.21.6.1

Đối số phải là một con trỏ void. Giá trị của con trỏ là được chuyển đổi thành chuỗi các ký tự in, theo cách được thực hiện theo cách được xác định .

5

Sẽ luôn cung cấp (không)?

Không hề. Trên máy tính của tôi (Mac có i686-apple-darwin11-llvm-gcc-4.2), nó in 0x0.

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