" Скажите, пожалуйста, разница между функциями, принимающими массивы с использованием одинарных, двойных или тройных указателей. "
Массивы (например, int[]
) изменитсяto (int*
) во время компиляции ...
Например, взять целое число int some_num = 10;
Что бы вы сделали, если вдруг захотите сохранитьконечно, эти числа в виде массива int[] some_num_array = { some_num, some_num2, some_num3 };
<- <em>Это наиболее общий способ сделать это ...
Если вы знаете о векторах ,тогда векторный эквивалент будет: std::vector<int> some_num_array{ some_num, some_num2, some_num3 }
...
И вы, наверное, уже знаете, что делает вектор, это контейнер , который хранит значения внутри него и, конечно, он никогда не сможетхранить бесконечное значение, так как оно израсходует вашу память и станет настолько большим, насколько ваша память сможет справиться ...
Это, int*** A
, которое вы запросили, можно интерпретировать как std::vector<std::vector<std::vector<int>>>
...
Как вы уже можете видеть, это вектор , содержащий векторы векторов ...
Тогда, точно так же, это указатель , содержащий указатели указателей , а также ...
Оператор ссылки (&) используется для преобразования указателя в супер-указатель и т. Д. А в C / C ++ средство ссылки позволяет другим членам и функциям назначатьзначение переменной ( Помните!Вы никогда не можете присвоить переменную, никогда! ) ...
Если мы попытаемся преобразовать наше число some_num
выше в int***
, это означает преобразование переменной без указателя втрехуровневый указатель, значение которого будет равно 5 ... auto A = new int**(new int*(&some_num));
Другими словами, int***
можно назвать трехмерным указателем (массивом), как вы виделидвумерный массив, хранящий столбцы внутри его строк (индексы).
Трехмерный массив, с другой стороны, хранит несколько двумерных массивов внутри себя ( сторон)) ...
"* Что означает *** A? *"
Здесь вы можете спутать людей с термином, который известен как de ссылается на и делает совершенно противоположную ссылку, факт, о котором мы говорили все это время ... это de ссылки (сокращение [Следовательно, использование de внутри термина] так называемый уровень указателя один за другим) ...
Например, some_num = ***A;
, что простохранит значение A внутри some_num
Но, ***A = some_num;
, с другой стороны, отличается, оно меняет значение A где-нибудь, кроме НЕ самого указателя, поэтому (const char)*
не может быть разыменовано для присваивания, поскольку его разыменованное значение является константным символом, а является константой ... ... (внутри или снаружи функции)
Итак, в заключение я бы сказал, что использование указателей должно либо разыменовать его значение (изменяя значение,но не указатель) или создание массива ограничения уровней указателей на основе памяти ...