2016-10-08 5 views
-2

Я пытался понять это объявление массива в течение получаса, но значение int * [n] меня очень сильно сбивает с толку. Есть ли более удобный способ написать эту декларацию? Как я могу получить такой тип декларации в cpp?Объявление двойного указателя 2-d int ** seq = new int * [n];

+0

Не используйте необработанные указатели, пожалуйста! Кроме того, полтора часа исследования не позволяет вам задавать вопрос в Stack Overflow. –

+1

Это массив 'int *'. – songyuanyao

+0

Что не так с использованием исходных указателей? –

ответ

1

Есть ли более удобный способ написать эту декларацию?

идиоматических способ заявить, что массив указателей в C++ будет

int n,q; 
cin>>n>>q; 
std::vector<int*> seq(n); 

Хотя сомнительно, почему int* указатели должны храниться в массиве.

-1

A int * - указатель (я полагаю, вы знаете это).
So int * [n] - массив длины n содержащий указатели на целые числа.
Что больше всего смущает людей, так это то, что переменные, содержащие массивы, на самом деле являются указателями на C++. Из-за этого тип переменной, мы храним int * [n], должен быть int **.
Указатель указывает на первый элемент массива и, например, seq [2] будет скомпилирован в * (seq + 2). Массив не является объектом, а конструктом в памяти, о котором компьютер не знает во время выполнения.

+0

[Blah, blah, bla bla] (https://www.youtube.com/watch?v=anwy2MPT5RE) –

+0

_ "Массив не объект, а конструктор в памяти, о котором компьютер не знает во время выполнения." _ Huh ?? –

+0

@ Я понимаю, что подход std-lib более приятный, но он попросил объяснение – Syntac

Смежные вопросы