改变指针数组的内容

时间:2012-01-01 05:18:30

标签: c arrays pointers

这看起来应该很容易,但我花了太多时间。希望有人可以提供帮助。

char *labels[] = { "apple", "orange" }; // each items inside label is string literal. We can't change them-

请看下面的

char a[]="hi";
char b[]="hello";
char *name[]={a,b};//each item inside name is not string literal rite??
*name="bye";
puts(a);

我认为输出将为bye,因为我使用a[]更改了*name="bye"的内容

但输出仍为hi。为什么?

1 个答案:

答案 0 :(得分:5)

char *name[]={a,b};//each item inside name is not string literal rite?? - 不完全是,每个元素都是指向char的指针。

所以name是一个指针数组。 *name="bye"更改了第一个指针变为的内容。它不会更改旧指针指向的内存。

如果您想这样做,一般会使用strncpy,但请注意,此处您没有足够大的阵列来执行此操作。

(我也希望你的编译器能给你一个关于为const char * char*分配*name="bye"的警告

*name="bye"之前:

State before

*name="bye"之后:

State after