使用 void 函数更改 const char
Posted
技术标签:
【中文标题】使用 void 函数更改 const char【英文标题】:Changing a const char with a void function 【发布时间】:2021-11-25 07:04:51 【问题描述】:我正在尝试理解以下代码以及函数、void 和 char 如何协同工作。我想知道是否可以将 char 输出从 'a' 更改为 char 'b',只需编辑 void 函数?我尝试过void foo(char *x) *x = 'b';
,但是我收到一条错误消息,提示“核心转储”,我对此感到困惑。
如果无法更改const char ch = 'a';
的值,您将如何更改 char ch = 'a'
的值?
谢谢~
#include <stdio.h>
void foo(char x)
x = 'b';
int main()
const char ch = 'a';
foo(ch);
printf("ch = %c", ch);
return 0;
【问题讨论】:
你为什么要改变你声明const
的东西的价值?这违背了将其设为const
的意义
你真正想做什么?
代码不是试图改变const
的值,而是函数本地的一个副本。
您可能收到了错误,因为ch
的值存储在只读内存区域中。通过明确地将ch
设为const
,编译器完全可以这样做。通过尝试写入只读区域,您可能触发了访问冲突。
【参考方案1】:
不,仅通过更改功能是不可能做到这一点的。需要改函数取指针,改调用者传递变量地址,改变量为非const
。
#include <stdio.h>
void foo(char *x)
*x = 'b';
int main()
char ch = 'a';
foo(&ch);
printf("ch = %c", ch);
return 0;
【讨论】:
以上是关于使用 void 函数更改 const char的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ostream::write() 在 C++ 中需要“const char_type*”而不是“const void*”?