Как назначить двумерный массив на ** указатель? это идея о том, что я хочу сделатьКак назначить двумерный массив на ** указатель?
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
так любая помощь? заранее спасибо
Как назначить двумерный массив на ** указатель? это идея о том, что я хочу сделатьКак назначить двумерный массив на ** указатель?
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
так любая помощь? заранее спасибо
Простой ответ заключается в том, что вы не можете. Двумерный массив представляет собой непрерывный блок памяти, который содержит каждую строку, а указатель на указатель может ссылаться на ячейку памяти, где указатель на другую ячейку памяти, содержащую целые числа.
С другой стороны, вы можете создать отдельную структуру данных, содержащую указатели на элементы так, как вы хотите (т. Е. Создать массив указателей, инициализировать эти указатели в начале каждой строки и использовать указатель на этот массив указателей как pointer
), но это совсем не полезно, а скорее усложнит все ненужное.
Вопрос, вероятно, исходит из распространенных заблуждений о том, что массивы и указатели являются одинаковыми, которыми они не являются. Массив может распадаться на указатель на первый элемент массива (и будет делать это довольно часто), но тип этого указателя является типом первого элемента. В двумерном массиве типом первого элемента является внутренний массив, а не тип базового элемента.
Объявите указатель, как это:
int (*pointer)[3] = array;
Но это бесконечно противный в C++. Возможно, вы могли бы найти лучшее решение (одно с участием векторов и еще много чего), если бы вы объяснили, какова ваша общая цель.
Согласен. STL сэкономит много головной боли. – chris
Это не то, что я хочу на ll, это одномерный массив спасибо u для ура усилия –
@AhmedZainElDein: то, что вы хотите, невозможно сделать, и это подход, чтобы обеспечить что-то, что будет * источником * совместимым с тем, что вы *хотеть*. –
ОК спасибо очень, я знаю, что массив сам по себе является указателем например, arr [2] может иметь дело с ним как * arr * (arr + 1) = 3 Как я могу сделать то же самое, но с двухмерным массивом? arr [3] [2], могу ли я сказать ** arr = 0 и т. Д. –
@AhmedZainElDein: НЕТ, вы ошибаетесь, и это распространенное заблуждение. Массив ** не ** указатель на первый элемент, они совершенно разные типы, даже если есть неявное преобразование из массива в указатель на первый элемент. Как только вы действительно поймете, что они не * то же самое, вам будет легче понять, почему то, о чем вы просите, не может быть сделано. Другой способ взглянуть на это - это рисовать макет памяти двумерного массива (один блок из элементов размера N * M), а затем понять, что внутри этого блока нет указателя, поэтому вы не можете создать указатель на него –
спасибо u для просветления меня .я больше склоняюсь к тому, что вы говорите, потому что я не могу найти, чтобы сделать ** arr ссылку на arr [3] [2] на всех , но это заставляет меня задавать другой вопрос, что в одном массиве он работает int arr [2], я могу сказать * arr = 0; * (arr + 1) = 3 –