if语句中值的连续等号判断,为什么就只能输出一行a[0][0],分开就正常了?肯请指点迷津(环境vs2013)

C++语言 码拜 9年前 (2016-05-17) 981次浏览
/*
5.5 编写一个程序, 对于二维数组 b[2][3]={{1,2,3},{4,5,6}}, 验证*(*(b+i)+j)、 *(b[i]+j)、
(*(b+i))[j]与 b[i][j]是相同的。
*/
#include <iostream>
using namespace std;
void main()
{
int  b[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << “经检验:”;
//if ((*(*(b + i) + j)) == (*(b[i] + j)) == ((*(b + i))[j]) == (b[i][j]))
{
//cout << “*(*(b+” << i << “)+” << j << “)==*(b[” << i << “] + ” << j << “) == (*(b + ” << i << “))[” << j << “] == b[” << i << “][“<< j << “]” << endl;
//cout << ” b[” << i << “][” << j << “]” << “不成立!” << endl;
if (*(*(b + i) + j) == *(b[i] + j))
{
cout << “*(*(b+” << i << “)+” << j << “)==*(b[” << i << “] + ” << j << “)”;
}
if (*(b[i] + j) == (*(b + i))[j])
{
cout << “*(b[” << i << “] + ” << j << “) == (*(b + ” << i << “))[” << j << “]”;
}
if ((*(b + i))[j] == b[i][j])
{
cout << ” (*(b + ” << i << “))[” << j << “] == b[” << i << “][” << j << “]” << endl;
}
}
}
}
system(“pause”);
}
解决方案

40

不能这样用“连等”比较的,“==”返回的结果并不像“=”,而是一个布尔型数,所以即便a=b=c=2,a==b==c的比较过程是先比较a==b(左结合)得到一个布尔型的1,然后再拿这个1和c比较即1==c,这样显然是不对的
解决方法就是楼上说的,要用a==b && a==c的形式
不理解欢迎继续追问,满意请及时结贴,谢谢

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明if语句中值的连续等号判断,为什么就只能输出一行a[0][0],分开就正常了?肯请指点迷津(环境vs2013)
喜欢 (0)
[1034331897@qq.com]
分享 (0)