只需通过char指针访问函数中的char数组

时间:2014-08-16 03:11:15

标签: c string pointers printf

在这个程序中我通过函数指针访问全局 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 

4 个答案:

答案 0 :(得分:2)

string = "jhony";

不会将"jhony"复制到string指向的内存中。相反,它会将"jhony"的地址分配给string

在此之后,string指向"jhony",而str保持不变。


正如@BrianCain所评论的,要将"jhonny"复制到string寻址的内存,您可以使用

strcpy(string, "jhonny");

答案 1 :(得分:1)

这是因为string是一个局部变量。当您设置string = jhony时,您没有更改str。您只需更改字符串指向的内容。在此之后定义了两个字符串常量,“aaaaa”和“jhony”,aaaaa字符串不会被覆盖。 Str仍然是“aaaaa”,因为它没有被johnny赋值给字符串。

答案 2 :(得分:1)

string和str都是指向同一个东西的不同指针。使用数组 符号与解除引用相同,因此您实际操作基础数据,因为它们指向同一事物,两个地方都注意到了变化。

当您将指针设置为等于文字时,没有任何解除引用或数组表示法。这改变了指针所指向的内容,但未触及基础数据。所以其他指针没有注意到这种变化。

将指针设置为某个值会改变其值,因为指针的值是一个地址。该地址是对指针所指向的引用,但现在指针指向新地址。在您的情况下,字符串文字。

答案 3 :(得分:0)

string = "jhony";

这个语句改变了字符串的值,这意味着变量字符串不再指向全局数组,它现在指向新的const字符串&#34; johny&#34;存储在函数堆栈中的