c - 为什么指针在 C 中不会改变它的值?
问题描述
我有这个代码:
void func(char *c){
c = 'B';
printf("s en func: %c\n", c);
}
int main()
{
char *s = 'A';
printf("s en main: %c\n", s);
func(s);
printf("s en main 2: %c\n", s);
return 0;
}
我想要这样的输出:
s en main: A
s en func: B
s en main 2: B
但我有这个:
s en main: A
s en func: B
s en main 2: A
为什么会发生这种情况,我该如何解决?
解决方案
char *s = 'A';
一旦您访问*s
,您的程序就未定义,这是您从未做过的。你只是把它当作一个角色。
你似乎想要
void func(char *c){
*c = 'B';
printf("s en func: %c\n", *c);
}
int main()
{
char value = 'A';
char *s = &value;
printf("s en main: %c\n", *s);
func(s);
printf("s en main 2: %c\n", *s);
return 0;
}
也就是说,在*
指针后面到处填写并声明一个变量来保存初始的“A”。
推荐阅读
- flutter - 为通知中的应用名称文本设置颜色 flutter_local_notifications
- python - 如何根据特定条件用列表值替换 Pandas Dataframes 中的元素?
- c++ - 静态链接 libm 以在多台计算机上获得相同的结果
- javascript - 将选择日期限制在今天和前 7 天之间
- java - 如何在 Long 对象的值末尾添加零
- php - PHP 为什么这个简单的数组显示不正确的值
- c# - 虚拟相机 - 从 Opencv 捕获图像帧并传递给 Directshow 过滤器以用于虚拟相机应用程序
- javascript - d3气泡图反应js:如何将气泡保持在图表边界内?
- java - 具有泛型类型的字段可能为 null 的泛型类
- image-processing - 为 CNN 填充尺寸小于 5 x 5 像素的图像