一个关于C++的超小问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:34:26
偶是菜鸟问下各位
1.前面定义了char ch='b',s[]="abcde"
cout<<ch+2为什么是d的ASCII码呢,而不是d
cout<<s+2为什么是cde呢
2.已知a=b=1
执行--a&&++b ,结果为什么b是1呢,不是2
执行++a||--b ,结果为什么是b是1不是0
这和--,++的前置后置有关吗?
但是第二题中a就是0和2

前面定义了char ch='b',char s[]="abcde"
cout<<ch+2为什么是d的ASCII码呢,而不是d
//回答:
//因为ch+2一句把ch进行了隐式类型转换, 由char转换为int, 所以输出的是整数而不是字符
//如果改为cout<< (char)(ch + 2) ; 那么就会输出d了
cout<<s+2为什么是cde呢
//回答:
//s是数组名, 也就是指向数组中第一个元素的指针, 这里是指向a, 当s+2以后, 相当于将该指针后移动
//两位, 所以s指向c, 自然输出的就是cde了
2.已知a=b=1
执行--a&&++b ,结果为什么b是1呢,不是2
//回答:
//因为&&是逻辑与, 它的判断具有高效性, 比如两个操作数相与, 如果第一个数为假, 那么它
//直接将结果记为假, 而不会取关心第二个操作数了, 这里因为a=1, 那么--a为0, 所以结果肯定为0
//它不会再计算b的值了, 所以b仍然为1
执行++a||--b ,结果为什么是b是1不是0
//回答:
//同上面, ||为逻辑或操作, 如果两个数相或, 只要第一个操作数的值为真, 那么结果为真, 而不会
//计算第二个操作数了
//所以b仍然是1.

1.1)因为ch是char型, 2是int型, 所以ch + 2时先把ch变成整型,即'b'的ASCII码, 最后+2.
1.2)一楼已经说了.

2.1)--a&&++b, 先执行--a, 因为--a得0, 0&&任意数=0, 所以程序不执行++b了, 对于(x)&&(y)的运算, 只有当(x)为真时才执行(y).
2.2)++a||--b则相反, ++a = 2为真, (真)||任意数都是(真), 所以不执行--b了