十进制本身转换为十六进制

时间:2011-11-02 13:08:21

标签: c++

我有小问题。我创建了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

5 个答案:

答案 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)

你想做

cout<<ar[i][j]<<" ";
GNU的

http://ideone.com/G5n4Z表示其未定义的行为。

答案 4 :(得分:0)

cout<<ar[i,j]<<" ";

将此行更改为:

cout<<ar[i][j]<<" ";