使用函数更改指针在C中表示的值

Nic*_*ick 16 c pointers

我有一个main具有char 的函数,我试图将指针传递给char函数并将其更改为A,B但它似乎并没有改变它.这里显示的例子只是代码的当前状态我尝试了许多不同的变体,因此可能存在其他错误,只是简单地抓住吸管.

int main()
{
    char result = 'A';
    setChar(&result);
    printf("%C", result);
}

void setChar(char* charToChange)
{
    charToChange = "B";
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*ock 24

你想要的是什么*charToChange = 'b';.指针charToChange是一个局部变量(参数)setChar,但您可以使用前缀*运算符和赋值更改它指向的内容.请注意,这*charToChange也是一个字符,而不是字符串.

  • @尼克可能想考虑获得一个更好的编译器。大多数编译器都会对这样的隐式类型转换发出警告。 (3认同)
  • 谢谢你,你不会相信我为了这个小小的*浪费了多少时间。非常感激。 (2认同)

Fré*_*idi 11

您必须取消引用传递给setChar()它的指针,以便修改它指向的值,而不是指针参数本身.

您还必须使用字符文字'B'而不是字符串文字"B"(指向char,而不是a char).

void setChar(char* charToChange)
{
    *charToChange = 'B';
}
Run Code Online (Sandbox Code Playgroud)


Sah*_*shi 9

当你使用&result作为参数调用setChar函数时,它会传递存储它的结果的地址.

所以它被赋值给char指针*charToChange

假设结果的地址是 [0x00000010] - >'A'

charToChange的地址是[0x00000100] - > 0x00000010

现在当你尝试写charToChange ="B"时;

它创造了新的记忆,它存储"B"

设说[0x00001000] - >'B'&& [0x00001001] - >'\ 0'

所以在做Assignment时它会存储

[0x00000100] - > 0x00001000

但是地址0x00000010指向A

所以这是错的

你应该替换charToChange ="B";

*charToChange ='B';

所以0x00000100的值变为'B'

总记得

*意味着价值和

&Means Addressf


Dar*_*rio 5

您想要更改指针指向的值,而不是指针本身。

因此,您需要使用以下方式取消引用指针*pointer

void setChar(char* charToChange) {
    *charToChange = 'B';
}
Run Code Online (Sandbox Code Playgroud)

如果不这样做,您只需更改 的本地值即可charToChange