Не работает указатель на двумерный массив

Тема в разделе "Общие вопросы по С и С++", создана пользователем OverCplusplus, 10 ноя 2008.

  1. OverCplusplus

    OverCplusplus Гость

    Привет. У меня в книжке написано:
    Пишу я программу - не работает.
    К примеру:
    <!--shcode--><pre><code class='С++'>#include<iostream>
    using namespace std;
    int main()
    {
    int test[2][10]={
    {1,2,3,4,5,6,7,8,9,10},
    {1,2,3,4,5,6,7,8,9,10}
    };
    int *t,*e;
    t=test; e=&test[1][10];
    while(t<=e)
    {
    cout<<*t;
    t++;
    }
    }[/CODE]
    В программе один указатель указывает на начало массива, второй на конец, и с помощью цикла cout выводит элементы массива на экран, пока не будет достигнут конец массива.
    По идее, согласно книге в записе t=test ничего плохого нет... компилятор ругается: невозможно преобразовать
    Люди, что я сделал или понял не так, помогите пожалуйста.
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Книжка или старая, или неточная. Хотя любопытно, работало ли это раньше, учитывая что С++ идет ко все более сильному контролю типов. Проблема здесь в том, что хотя реально test есть указатель на первый элемент массива, формально test[0] есть int[], а t[0] это int, отсюда и несовместимость типов. С точки зрения типов, int test[][] это int** test; поэтому и нельзя это присвоить int *t.
     
  3. OverCplusplus

    OverCplusplus Гость

    Сделал t=&test[0][0] - заработало. Спасибо.
     
Загрузка...

Поделиться этой страницей