在这个程序中,我通过函数指针访问全局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:32:39
string和str都是指向同一事物的不同指针。使用数组表示法与取消引用是一样的,因此您实际上是在操作底层数据,而且因为它们指向的是相同的东西,所以在这两个地方都注意到了变化。
当您将指针设置为等于文字时,没有任何取消引用或数组表示法。这改变了指针指向的内容,但没有触及底层数据。因此,另一个指针没有注意到这个变化。
将指针设置为等于某物的值会改变它的值,因为指针的值是一个地址。该地址是对指针指向的任何内容的引用,但现在指针指向新地址。在您的例子中,字符串文字。
https://stackoverflow.com/questions/25336583
复制相似问题