Trình khởi tạo mảng như trả lại { 'a', 'b', 'c' }
là gì? Sự hiểu biết của tôi là sử dụng trình khởi tạo phân bổ các khối bộ nhớ tiếp giáp và trả lại địa chỉ cho khối đầu tiên.Bộ khởi tạo mảng là gì?
Các mã sau đây không làm việc:
char *char_ptr_1 = { 'a', 'b', 'c', '\0' };
Mặt khác, đây là dường như làm việc tốt:
char char_array[] = { 'a', 'b', 'c', '\0' };
char *char_ptr_2 = char_array;
char_array
cửa hàng địa chỉ để các khối bộ nhớ đầu tiên đó giải thích tại sao Tôi có thể chỉ định giá trị của char_array
đến chat_ptr_2
. Liệu C có chuyển đổi giá trị được trả về bởi trình khởi tạo thành thứ gì đó có thể được lưu trữ trong một con trỏ không?
Tôi đã xem trực tuyến và tìm thấy một vài câu trả lời đã nói về sự khác biệt giữa mảng và con trỏ nhưng chúng không giúp tôi.
bạn muốn các ký tự Hợp chất trong C99. Ví dụ. 'char * char_ptr_2 = (char []) {'a', 'b', 'c', '\ 0'};' – BLUEPIXY
Tuy nhiên, danh sách khởi tạo của một chữ cái hợp chất tuân theo các quy tắc tương tự như bất kỳ danh sách bộ khởi tạo nào khác. Hợp chất theo nghĩa đen chỉ phân bổ một đoạn dữ liệu ẩn danh trên ngăn xếp. Vì vậy, nó tương tự như tuyên bố một mảng và sau đó gán một con trỏ trỏ vào mảng đó. – Lundin
Bạn có thể nói 'char * char_ptr_1 =" abc ";'. Tuy nhiên, GCC báo cáo nó là không được chấp nhận mà không có một sửa đổi 'const'. Có lẽ đó là bởi vì trình biên dịch không được yêu cầu để tạo ra một mảng duy nhất cho mỗi lần xuất hiện chuỗi ký tự. –