2015-02-25 3 views
0

Как получить доступ к значению указателя на первый элемент массива. Я сделал попытку ниже, но код не будет создан.C++ указатель на указатель на массив и доступ?

int _tmain(int argc, _TCHAR* argv[]) 
{ 


/// pointers array 

    mint *yellow [5]; 



/// each pointers array point to an an array of 10 elements 
for (int i = 0; i < 5; i++) 
{ 
    yellow[i] = new int [10] ; 
} 

/// assigning to pointer 1, array 1, element 1 the value of 0; 
/// 
*yellow[0][1][0] = 0; 


std::cout << *yellow[0][1][0]; 


system("pause"); 
return 0; 
} 

Обновление-

хотя, что у меня нет элемента 20, но я до сих пор в состоянии назначать и распечатать элемент 20

int _tmain(int argc, _TCHAR* argv[]) 
    { 


/// pointers array 

int *yellow [5]; 



/// each pointers array to an an array of 10 elements 
for (int i = 0; i < 5; i++) 
{ 
    yellow[i] = new int [10] ; 
} 

/// assigning to pointer 1, array 1, element 1 the value of 0; 
/// 
yellow[0][20] = 0; 


std::cout << yellow[0][20]; 


system("pause"); 
return 0; 
+1

Вы создаете только 2 измерения, так почему вы используете индексирование для 3-х измерений? 'yellow [0] [1] = 0;' должен работать. –

ответ

1

Чтобы получить доступ к первому элементу первой массив, используйте

yellow[0][0] = 0; 

или

(*yellow)[0] = 0; 

Чтобы получить доступ к третьему элементу второго массива, используйте

yellow[1][2] = 0; 

или

(*(yellow+1))[2] = 0; 

Чтобы обобщить эту идею ... Чтобы получить доступ к N-й элемент М-го массив, используйте

yellow[M-1][N-1] = 0; 

или

(*(yellow+M-1))[N-1] = 0; 
+0

Спасибо, я попробовал то, что вы заявили, и теперь это вызвало другие вопросы. Я обновил сообщение. – someGuy

+0

@someGuy, то, что вы добавили, является синтаксически правильным, но оно создаст проблемы во время выполнения, так как вы получаете доступ к массивам за пределами границ. Доступ к массивам за пределами границ - это неопределенное поведение. Казалось бы, это сработает, но это произойдет в самый неподходящий момент. –

0

Фактически, назначив желтый [0] [20], вы вызываете undefined behavior. Другими словами, ваша программа не всегда обеспечивает печать 0, значение сохраняется в желтом цвете [0] [20].