为何直接给指针赋值常量未报错?未先指定指针指向地址
为什么直接给指针赋值数值不会触发编译报错?
首先纠正你代码里的笔误:chat应该是char,不过这不是核心问题。
- C语言允许整数直接赋值给指针变量,这属于隐式类型转换——编译器会把整数
4000转换成对应类型的指针(也就是内存地址)。只要这个整数的值在目标指针类型的取值范围内,编译器默认不会报错(除非你开启严格的编译警告)。 - 编译阶段只做语法和基础类型检查,这种赋值操作本身符合语法规则,所以不会触发编译错误。但这是极度危险的操作:
- 地址
4000几乎肯定不属于你的程序能合法访问的内存区域,后续如果尝试通过这些指针读写内存(比如执行*c = 'a';),程序会直接触发段错误,或者出现不可预测的未定义行为。 - 很多编译器支持通过开启警告来检测这类问题,比如GCC加上
-Wall参数,就会提示“初始化将整数赋给指针,未作强制转换”的警告。
- 地址
内容的提问来源于stack exchange,提问作者Vigneshwara Reddy S
相关产品推荐
相关产品推荐

