我有一个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也是一个字符,而不是字符串.
Fré*_*idi 11
您必须取消引用传递给setChar()它的指针,以便修改它指向的值,而不是指针参数本身.
您还必须使用字符文字'B'而不是字符串文字"B"(指向char,而不是a char).
void setChar(char* charToChange)
{
*charToChange = 'B';
}
Run Code Online (Sandbox Code Playgroud)
当你使用&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
您想要更改指针指向的值,而不是指针本身。
因此,您需要使用以下方式取消引用指针*pointer:
void setChar(char* charToChange) {
*charToChange = 'B';
}
Run Code Online (Sandbox Code Playgroud)
如果不这样做,您只需更改 的本地值即可charToChange。
| 归档时间: |
|
| 查看次数: |
61038 次 |
| 最近记录: |