在这种情况下如何通过引用传递?

use*_*280 1 c pointers pass-by-reference

我尝试使用该change()函数来更改内容y.我要问,为什么y不能改变,当我删除*分配时x"abc"

另外,我发现它&*x是一样的&y,这是否意味着指针的地址x被指定为与指向的内容的地址相同*y?另外,为什么&x不等于"abc"

我的代码:

void change(char *x) {
    *x = "abc";
    printf("S3: %x\n", &x);
    printf("S4: %x\n", &*x);
}

int main() {
    char *y = "def"; 
    printf("S1: %x\n", &y);
    printf("S2: %x\n", &*y);
    change(&y);
    printf("result: %s\n", y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

您的代码中存在许多问题,需要指出其中的一些问题

  1. y指向字符串文字.任何修改字符串文字的尝试都是 未定义的行为.
  2. 要打印地址,请使用%p格式说明符,并使用强制转换(void*)为参数,使用不正确的参数类型是 未定义的行为.同样,要打印a char,您需要%c打印所需的字符串%s.在这里阅读更多
  3. 内部change()函数*x是类型char,并且您尝试为其指定一个指针(字符串文字的基址"abc").

足够!!请你的编译器告诉你其余的.(换句话说,请启用编译器警告并尝试修复报告的问题.)