簡體   English   中英

小數本身會轉換為十六進制

[英]Decimal itself converts to hexadecimal

我有小問題。 我創建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 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]<<" ";

使用GNU的http://ideone.com/G5n4Z表示其未定義的行為。

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

將此行更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM