►Объявление и использование массивов указателей...124
Если есть указатели на массивы, можно предположить, что существуют и массивы указателей. Именно их мы сейчас и рассмотрим.
Поскольку массив может содержать данные любого типа, он может состоять и из указателей. Массив указателей объявляется так:
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 ;
}
}
В последнем варианте память под переменные выделяется из кучи.
Массивы указателей чаще всего используются для работы с массивами строк. Приведённые далее примеры показывают, почему это удобно.
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ