在这个程序中,我通过函数指针访问全局char数组,用char指针中的地址更改字符串值对全局char数组有影响,但是当将字符串更改为整个字符串时,它对全局数组没有任何影响。
#include <stdio.h>
#include <string.h>
void function(char *string);
char str[20] = "Hello"; // global char array
int main()
{
function(str);
return 0;
}
void function(char *string)
{
int i;
printf("%s\n",string);
printf("%s\n", str);
for(i = 0;i < strlen(string);i++)
string[i] = 'a';
printf("%s\n",string);
printf("%s\n", str);
string = "jhony";
printf("%s\n",string);
printf("%s\n",str); // here is the doubt
}输出
Hello
Hello
aaaaa
aaaaa
jhony
aaaaa //how this supposed to print aaaaa even after we changed string into jhony 发布于 2014-08-16 03:14:12
string = "jhony";不将"jhony"复制到string指向的内存。相反,它将"jhony"的地址分配给string。
在此之后,string指向"jhony",而str则保持不变。
正如@BrianCain所评论的,要将"jhonny"复制到由string寻址的内存中,可以使用
strcpy(string, "jhonny");发布于 2014-08-16 03:18:53
这是因为字符串是局部变量。当您设置string = jhony时,您不会更改str。您只是在简单地更改字符串所指向的内容。在定义了两个字符串常量" aaaaa“和"jhony”之后,就不会覆盖aaaaa字符串。Str仍然是"aaaaa“,因为它并没有被约翰尼给string的任务所覆盖。
发布于 2014-08-16 03:32:39
string和str都是指向同一事物的不同指针。使用数组表示法与取消引用是一样的,因此您实际上是在操作底层数据,而且因为它们指向的是相同的东西,所以在这两个地方都注意到了变化。
当您将指针设置为等于文字时,没有任何取消引用或数组表示法。这改变了指针指向的内容,但没有触及底层数据。因此,另一个指针没有注意到这个变化。
将指针设置为等于某物的值会改变它的值,因为指针的值是一个地址。该地址是对指针指向的任何内容的引用,但现在指针指向新地址。在您的例子中,字符串文字。
https://stackoverflow.com/questions/25336583
复制相似问题