首页 > 解决方案 > 为什么指针在 C 中不会改变它的值?

问题描述

我有这个代码:

void func(char *c){
    c = 'B';
    printf("s en func: %c\n", c);
}
int main()
{
    char *s = 'A';
    printf("s en main: %c\n", s);
    func(s);
    printf("s en main 2: %c\n", s);

    return 0;
}

我想要这样的输出:

s en main: A

s en func: B

s en main 2: B

但我有这个:

s en main: A

s en func: B

s en main 2: A

为什么会发生这种情况,我该如何解决?

标签: c

解决方案


char *s = 'A';

一旦您访问*s,您的程序就未定义,这是您从未做过的。你只是把它当作一个角色。

你似乎想要

void func(char *c){
    *c = 'B';
    printf("s en func: %c\n", *c);
}
int main()
{
    char value = 'A';
    char *s = &value;
    printf("s en main: %c\n", *s);
    func(s);
    printf("s en main 2: %c\n", *s);

    return 0;
}

也就是说,在*指针后面到处填写并声明一个变量来保存初始的“A”。


推荐阅读