在这个程序中,我通过函数指针访问一个全局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
最佳答案
string = "jhony";
不会将"jhony"
复制到string
指向的内存中。相反,它将 "jhony"
的地址分配给 string
。
所以之后,string
指向"jhony"
而str
保持不变。
正如@BrianCain 评论的那样,要将 "jhonny"
复制到由 string
寻址的内存中,您可以使用
strcpy(string, "jhonny");
关于c - 简单地通过 char 指针访问函数中的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336583/