int a = 1; printf(a); 出现段错误,为什么?
发布网友
发布时间:2022-06-06 07:40
我来回答
共2个回答
热心网友
时间:2023-10-06 02:45
a=
-1
则其在内存中以补码的形式存在。
1的原码是
0000
0000
0000
0001
则-1的反码为
1111
1111
1111
1110
-1的补码为反码+1
也就是
1111
1111
1111
1111
转换成十六进制也就是
f
f
f
f
所以结果为
ffff
热心网友
时间:2023-10-06 02:45
段错误说简单点就是你访问了不该访问的内存段
比如某个地址是保留给os的,你是访问不了的
这个问题在于printf(a)在c中由于隐式类型转换int->const
char*
printf把数值1当作了本该是一个字符串地址的值,32位系统下这个地址是0x00000001,正好处在os保留的内存区域
你用c++是不会出现这样的问题的,c++的类型检查在编译期间就会帮你发现这个错误