首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过char指针简单地访问函数中的char数组

通过char指针简单地访问函数中的char数组
EN

Stack Overflow用户
提问于 2014-08-16 03:11:15
回答 4查看 1.1K关注 0票数 1

在这个程序中,我通过函数指针访问全局char数组,用char指针中的地址更改字符串值对全局char数组有影响,但是当将字符串更改为整个字符串时,它对全局数组没有任何影响。

代码语言:javascript
复制
#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 
}

输出

代码语言:javascript
复制
Hello
Hello
aaaaa
aaaaa
jhony
aaaaa //how this supposed to print aaaaa even after we changed string into jhony 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-16 03:14:12

代码语言:javascript
复制
string = "jhony";

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

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

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

代码语言:javascript
复制
strcpy(string, "jhonny");
票数 2
EN

Stack Overflow用户

发布于 2014-08-16 03:18:53

这是因为字符串是局部变量。当您设置string = jhony时,您不会更改str。您只是在简单地更改字符串所指向的内容。在定义了两个字符串常量" aaaaa“和"jhony”之后,就不会覆盖aaaaa字符串。Str仍然是"aaaaa“,因为它并没有被约翰尼给string的任务所覆盖。

票数 1
EN

Stack Overflow用户

发布于 2014-08-16 03:32:39

string和str都是指向同一事物的不同指针。使用数组表示法与取消引用是一样的,因此您实际上是在操作底层数据,而且因为它们指向的是相同的东西,所以在这两个地方都注意到了变化。

当您将指针设置为等于文字时,没有任何取消引用或数组表示法。这改变了指针指向的内容,但没有触及底层数据。因此,另一个指针没有注意到这个变化。

将指针设置为等于某物的值会改变它的值,因为指针的值是一个地址。该地址是对指针指向的任何内容的引用,但现在指针指向新地址。在您的例子中,字符串文字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25336583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档