C 更改指针数组的内容
这看起来应该很容易,但我花了太多时间在上面。希望有人能帮忙C 更改指针数组的内容,c,arrays,pointers,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?
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
,因为我使用*name=“bye”
但是输出仍然是
hi
。为什么? char*name[]={a,b}//名称中的每个项目都不是字符串-不完全是,每个元素都是指向字符的指针
因此,name
是一个指针数组*name=“bye”
更改第一个指针更改为的内容。它不会改变旧指针指向的内存
如果您想这样做,您通常会使用strncpy
,但请注意,这里没有足够大的数组来实现这一点
(我还希望您的编译器在为*name=“bye”
的char*
分配const char*
时给您一个警告。)
在*name=“bye”
之前:
在*name=“bye”
之后:
字符*名称[]={a,b}//名称中的每个项目都不是字符串-不完全是,每个元素都是指向字符的指针
因此,name
是一个指针数组*name=“bye”
更改第一个指针更改为的内容。它不会改变旧指针指向的内存
如果您想这样做,您通常会使用strncpy
,但请注意,这里没有足够大的数组来实现这一点
(我还希望您的编译器在为*name=“bye”
的char*
分配const char*
时给您一个警告。)
在*name=“bye”
之前:
在*name=“bye”
之后:
调试时,我发现您所说的正在发生。但是*name
的地址是a[]
rite?对*名称的任何修改都必须反映在a[]
rite?中?。没有,我没有收到任何警告*name
仍然是一个指针,指向a
*name
更改指针指向的对象。因此,既然*name已更改为指向其他对象,那么查找b并期望它是“hello”并不是真正有效的,对吗?b
一点也没有更改。它仍然有效,它仍然由name
的第二个元素指向。感谢您的解释。你能解释一下为什么这不起作用吗?当我调试时,我发现你说的事情正在发生。但是*name
的地址是a[]
rite?对*名称的任何修改都必须反映在a[]
rite?中?。没有,我没有收到任何警告*name
仍然是一个指针,指向a
*name
更改指针指向的对象。因此,既然*name已更改为指向其他对象,那么查找b并期望它是“hello”并不是真正有效的,对吗?b
一点也没有更改。它仍然有效,它仍然由name
的第二个元素指向。感谢您的解释。你能解释一下为什么这不起作用吗