Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Нужна помощь с C++

#cpp #массивы


Почему выводится адрес, а не числа?

вот пример: 

#include 
using namespace std;
int main(void)
{
    int x,y;
    int numbers[10][10] = 
    {{1,2,3,2,7,1,8,1,6},
    {4,7,4,2,8,9,2,5,8},
    {4,9,3,3,6,2,8,4,2},
    {1,2,3,6,2,6,8,2,1}};

    for(x = 0;x < 10;x++){
        cout << *(numbers + x);
        for(y = 0;y < 10;y++){
            cout << *(numbers + y);
        }
    }

    return 0;
}

    


Ответы

Ответ 1



numbers имеет тип int [10][10] В данном контексте тип numbers неявно преобразуется к типу int (*)[10] Тип numbers + i - тоже int (*)[10] Соответственно тип *(numbers + i) - это int [10] В данном контексте тип int [10] неявно преобразуется к типу int * Именно этот int * вы и выводите. Потому и выводится адрес. Другими словами, в вашем примере адрес выводится по той же самой причине, по которой выводится адрес в int a[10]; std::cout << a << std::endl;

Ответ 2



Вот такой код int x; int numbers[10][20]; cout << typeid(numbers).name() << endl; cout << typeid(*(numbers+x)).name() << endl; в VC++ выдает int [10][20] int [20] Т.е. разыменование работает по первой размерности, выдавая одномерный массив... Понятно, что для него выводится адрес.

Комментариев нет:

Отправить комментарий