【问题标题】:Changing a const char with a void function使用 void 函数更改 const char
【发布时间】: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,编译器完全可以这样做。通过尝试写入只读区域,您可能触发了访问冲突。

标签: c function char void


【解决方案1】:

不,仅通过更改功能是不可能做到这一点的。需要改函数取指针,改调用者传递变量地址,改变量为非const

#include <stdio.h>

void foo(char *x) {
  *x = 'b';
}

int main() {
  char ch = 'a';
  foo(&ch);
  printf("ch = %c", ch);
  return 0;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2013-07-29
    相关资源
    最近更新 更多