int main(int argc, char *argv[]) {
char** c1 = {"Hey","Hello"};
printf("%s",c1[1]);
} //error
Trong mã trên, bạn đang cố gắng đặt con trỏ trỏ đến một bộ gồm hai chuỗi. Nơi lưu trữ cho hai con trỏ có chứa địa chỉ của "Hey" và "Hello" tương ứng? Hư không.
Bạn có thể làm:
char *a = "Hey";
char *b = "Hello";
char *c[] = { a, b }; // This MAY not compile due to a and b not being compile time constants.
char **c1 = c;
(Tôi đã tách nó ra thành các biến cá nhân hơn nó thực sự cần, nhưng tôi nghĩ rằng nó giải thích những gì là "sai" với mã của bạn khá rõ ràng).
Một ví dụ khác là nếu chúng ta thay đổi char *
để int:
const int a = 1;
const int b = 2;
int c[] = { a, b };
int *c = { a, b }; // Doesn't work, there is nowhere to store a copy of a and b.
Đó là điều tương tự, ngoại trừ với số nguyên.
Nguồn
2013-04-10 12:49:14
Con trỏ không phải là mảng. –