Việc kê khai:
static char const *program_name;
nói program_name
là một (variable) con trỏ tới ký tự không đổi. Con trỏ có thể thay đổi (vì vậy nó có thể được gán trong main()
), nhưng chuỗi chỉ vào không thể thay đổi thông qua con trỏ này.
So sánh và tương phản với:
static char * const unalterable_pointer = "Hedwig";
Đây là một con trỏ hằng số liệu biến; con trỏ không thể thay đổi, tuy nhiên nếu chuỗi nó được khởi tạo để trỏ vào không phải là một nghĩa đen, chuỗi có thể được chỉnh sửa:
static char owls[] = "Pigwidgeon";
static char * const owl_name = owls;
strcpy(owl_name, "Hedwig");
/* owl_name = "Hermes"; */ /* Not allowed */
Ngoài ra so sánh và đối chiếu với:
static char const * const fixed_pointer_to_fixed_data = "Hermes";
Đây là một con trỏ liên tục đến dữ liệu không đổi.
Nguồn
2013-01-11 05:14:10
Cảm ơn hai ví dụ khác! Sau đó, tôi đoán rằng '* program_name' là' const' nếu khai báo theo cách ban đầu, tức là 'static char const * program_name;'. Đó có phải ý của bạn? – AoZ
Chính xác. Bạn không thể viết '* program_name = 'a';' vì 'program_name' trỏ tới dữ liệu không đổi; bạn không thể sửa đổi dữ liệu thông qua con trỏ này (mặc dù các con trỏ khác cho cùng một dữ liệu có thể sửa đổi nó - trong trường hợp này, bạn có thể viết '* argv [0] = 'a';' nếu bạn muốn, mặc dù tôi có thể 't nghĩ về một lý do tốt cho muốn làm như vậy). –