使用 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*”?

const

使用 const char 组织字符串

VS2017出现不存在从"CString"到"const char*"的适当转换函数

常函数

使用带符号的char指针更改int数组的值