Câu hỏi của bạn đã được gắn thẻ C cũng như C++. Vì vậy, tôi sẽ trả lời cho cả hai ngôn ngữ.
[C]
Từ ISO C99 (Section 6.4.5/6
)
It is unspecified whether these arrays are distinct provided their elements have the appropriate values.
Điều đó có nghĩa là nó unspecified
liệu p
và q
được trỏ đến cùng một chuỗi đen hay không. Trong trường hợp của gcc
cả hai đều trỏ đến "I am a string"
(gcc tối ưu hóa mã của bạn) trong khi ở turbo c
thì không.
Unspeci fi ed Hành vi: Sử dụng một giá trị unspeci fi ed, hoặc hành vi khác mà tiêu chuẩn quốc tế này cung cấp hai hay nhiều khả năng và áp đặt không yêu cầu thêm vào đó được chọn trong bất kỳ dụ
[C++]
Từ ISO C++ - 98 (Section 2.13.4/2
)
Whether all string literals are distinct(that is, are stored in non overlapping objects) is implementation defined.
Trong C++, mã của bạn sẽ gọi hành vi được xác định.
thi-de fi Behavior ned: Unspeci fi ed hành vi mà mỗi thực hiện documents
như thế nào lựa chọn được thực hiện
Xem thêm this câu hỏi.
Nguồn
2010-07-20 11:31:13
Lấy gợi ý; sử dụng gcc ;-) – Amarghosh
Thấy rằng các câu trả lời của câu hỏi của bạn đã được bao gồm trong chuỗi 'printf' (BTW có' \ n' thiếu ở đó) Tôi cho rằng bạn đã lấy ví dụ mã này từ đâu đó? Đây có phải là bài tập về nhà không? –
FWIW, nếu bạn đang nói về trình biên dịch cổ từ Borland, tôi nghĩ rằng nó có một tùy chọn dòng lệnh ('-d') để kết hợp các hằng số chuỗi. – msandiford