Các con trỏ ký tự trong C gây nhầm lẫn cho tôi.Lẫn lộn về các ký tự con trỏ trong C
Giả sử chúng ta có con trỏ char, trỏ đến ký tự đầu tiên của chuỗi hằng số.
char *a="ABCD";
Sau đó, chúng tôi không thể thay đổi giá trị của ký tự đó bằng cách sử dụng con trỏ, như sau báo cáo dẫn đến lỗi phân đoạn.
*a='X';
Bây giờ giả sử chúng ta có một con trỏ char, mà chỉ vào một nhân vật liên tục.
const char B='X';
char *ptr=&B;
Sau đó chúng tôi được phép thay đổi giá trị của nhân vật mà sử dụng câu lệnh
*ptr='Z';
Câu hỏi của tôi là được này là một trường hợp hành vi undefined minh C là không mạnh mẽ? Hoặc là có một số logic sâu hơn có liên quan?
@EugeniuRosca bạn có nghĩa là 'char const * a =" ABCD "'. Họ không có cùng ngữ nghĩa. – Quentin
const nghĩa là bộ nhớ chỉ đọc. Giai đoạn. Bạn không được phép thay đổi nó bằng cách tham chiếu nó thông qua một con trỏ khác - điều này sẽ tạo ra một cảnh báo trình biên dịch. –
Hãy xem http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go – xp500