►Объявление и использование массивов указателей...124

We use cookies. Read the Privacy and Cookie Policy

Если есть указатели на массивы, можно предположить, что существуют и массивы указателей. Именно их мы сейчас и рассмотрим.

Поскольку массив может содержать данные любого типа, он может состоять и из указателей. Массив указателей объявляется так: 

        int* pInts[ 10 ] ;

Таким образом, элемент pInts[ 0 ] является указателем на переменную типа int. Следовательно, приведённый ниже код корректен:

      void fn( )

      {

           int n1 ;

           int* pInts[ 3 ] ;

           pInts[ 0 ] = &n1 ;

           *pInts[ 0 ] = 1 ;

      }

Как и этот:

      void fn( )

      {

           int n1 , n2 , n3 ;

           int* pInts[ 3 ] = { &n1 , &n2 , &n3 } ;

           for ( int i = 0 ; i < 3 ; i++ )

           {

                *pInts[ i ] = 0 ;

           }

      }

И даже этот:

      void fn( )

      {

           int n1 , n2 , n3 ;

           int* pInts[ 3 ] = { ( new int ) ,

                                    ( new int ) ,

                                    ( new int ) } ;

           for ( int i = 0 ; i < 3 ; i++ )

           {

                *pInts[ i ] = 0 ;

           }

      }

В последнем варианте память под переменные выделяется из кучи.

Массивы указателей чаще всего используются для работы с массивами строк. Приведённые далее примеры показывают, почему это удобно.