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

Decimal itself converts to hexadecimal

本文关键字:十六进制 转换 十进制      更新时间:2023-10-16

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

那是因为你落入了操作符,的狡猾陷阱!

首先,C语言没有多维数组作为原语。正如你在这里所声明的,二维数组只是"数组的数组"。因此,用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)或类似的
cout << ar[i,j] << " ";

应该是

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

逗号操作符,做(从这里)

逗号操作符(,)用于分隔只包含一个表达式的两个或多个表达式。当必须对一组表达式求值时,只考虑最右边的表达式。

所以这是输出ar[j](在计算i并丢弃结果之后),这是一个指针,因此是十六进制的。

访问数组成员的c++语法为:

ar[i][j]

你有Pascal背景吗?: P

你想做

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

http://ideone.com/G5n4Z with GNU表示其未定义行为

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

将这一行改为:

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