我有小问题。我创建了2D int数组。当我输入它时,我得到十六进制数字的小数。我正在使用Dev C ++。
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
const int max=9;
int ar[max][max]={
{0,6,0,0,2,0,0,4,0},
{5,0,0,3,0,0,0,0,0},
{0,8,0,0,1,0,0,0,0},
{6,0,0,0,0,7,0,0,0},
{0,3,7,0,0,0,2,8,0},
{0,2,0,8,0,0,0,3,0},
{0,0,0,0,0,0,0,0,0},
{7,0,0,4,0,0,0,0,1},
{0,0,0,0,6,0,0,2,0}};
for (int i=0;i<max;i++){
for(int j=0;j<max;j++){
cout<<ar[i,j]<<" ";
}
cout<<"\n";
}
system("pause");
return 0;
}
作为回报,我得到了这个http://www.dropmocks.com/mf8wl
答案 0 :(得分:9)
那是因为你陷入了运营商,
的狡猾陷阱!
首先,C没有多维数组作为基元。正如您在此声明的那样,2D数组只是“数组数组”。因此,使用a[i,j]
访问数组是没有意义的。您应首先使用a[i]
获取“行”,然后使用[j]
将“列”编入索引,a[i][j]
。
那么,为什么你的代码会编译?因为,
是C中的运算符。a,b
的评估实际上是对表达式a
的评估,然后是b
,返回评估b的结果。因此,您实际上在这里打印a[j]
,这是一个int[]
,以十六进制打印为数组的地址。
为什么要问一个运营商,
?除了令人困惑之外,它主要适用于像for
这样的结构,您可能需要在初始化或增量构造中使用多个表达式,即for (j = 0, i = 0; i + j < k; i++, j += 2)
或类似。
答案 1 :(得分:4)
cout << ar[i,j] << " ";
这应该是
cout << ar[i][j] << " ";
逗号运算符,
执行(来自here)
逗号运算符(,)用于分隔两个或多个表达式,这些表达式只包含一个表达式。当必须为一个值计算表达式集时,只考虑最右边的表达式。
所以这是打印ar[j]
(在评估i
并丢弃结果之后),这是一个指针,因此是十六进制的。
答案 2 :(得分:2)
访问数组成员的C ++语法是:
ar[i][j]
你来自Pascal背景? :P
答案 3 :(得分:0)
答案 4 :(得分:0)
cout<<ar[i,j]<<" ";
将此行更改为:
cout<<ar[i][j]<<" ";