#cpp #массивы
Почему выводится адрес, а не числа? вот пример: #includeusing 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] Т.е. разыменование работает по первой размерности, выдавая одномерный массив... Понятно, что для него выводится адрес.
Комментариев нет:
Отправить комментарий