问两三个c语言题的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 04:50:17
请解释一下3问题,谢谢了
============================================
int a=3
a---a的值为什么是0啊?
============================================
x=1,y=2
y+=++x*++x的值怎么是11啊?
============================================
逻辑运算符两侧运算对象的数据类型 .
A) 只能是0和1
B) 只能是0或非0正数
C) 只能是整型或字符型数据
D) 可以是任何类型的数据
帮选下,觉得是D,这个C项貌似少个浮点型?

第一个问题: a --- a 的实际计算顺序是 (a--)- a, a-- 在整个式子都计算结束之后才会被计算
所一这个式子的结果是 0, 而a的值编程2

第二个问题: y+= ++x * ++x ; ==> y += (++x) * (++x);
由于是 prefix, 在这个运算式运算之前x 就已经分别 两次加1了, 所以 值是 y += 3 * 3
y = 11;

第三个问题: 这个问题我也认为是D
因为在c语言里, 只要不是0, 就会被认为是TRUE. 在平时我们写代码的时候, 经常会写这样的代码
FILE *fp = fopen("input.txt", "r");
if(fp) ...
在这fp既不是整型也不是字符型,而是一个地址
但是只要这个地址不是NULL
就是TRUE
所以我认为D是正确的
还有你说到的double型也是可以通过的

一楼的好早啊,55,把我想说的都说完啊,顶下

一楼的很好,很强大
但是补充一点
如果是C++是不允许把浮点型赋给整型数据
在C++里它会认为是不安全操作