两个问题

远诚友加 2019-12-31 04:55:45
#include<stdio.h>
int main()
{
char *x="123";
printf(x);

} 和 #include<stdio.h>
int main()
{
const char *x="123";
printf(x);

} 第一个问题,为什么可以在printf里面直接用x,x不是一个指针吗,代表一个地址 第二个问题,为什么去掉const会报错,使用char *x="123";这样的代码会有什么风险 各位大佬求解
...全文
20 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-12-31
  • 打赏
  • 举报
回复
没发现会报错呢~都可以正常输出。

加上const后更能标识x是一个字符串常量
寻开心 2019-12-31
  • 打赏
  • 举报
回复
你所说的去掉const会报错,应该是 c++11标准的问题
“123” 本身就是一个 const char*类型, 把它赋值给 char *类型是类型不匹配, 你加一个强制转换就可以了
char * c = (char *) “123”;

这点在不同的编译器和编译设置上会有不同的表现, dev c++可能根本就不报错, VS高版本就会报错, XCode 就是一个警告
寻开心 2019-12-31
  • 打赏
  • 举报
回复
你要看printf函数的原型啊
printf的函数原型,第一个参数就是 char *, 本来需要的就是“”p
printf的第一参数用const char * 会不会报错,是编译器的事儿,检查严格不严格了。

char * c = “123”; 这只是表示 c这个指针的值可以被改变; 你可以回头就让 c = &ch; 这样的再次赋值
const char * c = “123”; 表示c不可以再更改了

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧