Khi đọc this question Tôi muốn kiểm tra đầu vào trong GCC để xem lỗi nào sẽ xuất ra. Để tôi ngạc nhiên dòng sau:Trong C, là khởi tạo mảng chỉ với một phần tử được xử lý đặc biệt?
char array[] = {"s"};
biên dịch không có lỗi hoặc cảnh báo, dẫn đến một mảng có kích thước 2 chứa "s\0"
. Tôi đã mong đợi một lỗi trình biên dịch vì bên phải của biểu thức là loại char*[]
.
Là khởi tạo mảng chỉ với một phần tử không được coi là một mảng trong trường hợp này và tại sao?
đặc biệt trong C, bạn thực sự có thể khởi tạo vô hướng sử dụng {} ... Tuy nhiên, tôi tự hỏi liệu nó có ảnh hưởng đến căn chỉnh hay không. Không .. không ảnh hưởng đến căn chỉnh :) –
OK. Vì vậy, tôi phải xem xét toàn bộ biểu hiện trong trường hợp này, và không chỉ ở phía bên trái?'{" s "}' chắc chắn không giống với '' s "', ví dụ 'char array * [] = {" s "};' là hợp lệ nhưng 'char array * [] =" s ";' không phải là. – Antoine
mảng char * [] = {"s"}; có hiệu lực? nó là một lỗi cú pháp –