2016-07-12 2 views
2
int * array[60]; //creates an array of 60 pointers to an int 
int * array = new int(60); //same thing? 

Получают ли эти данные одинаковые типы массивов? например, массив указателей на целые числаРазница между int * array [60] и int * array = new int (60);

Я знаю, что первый из них не инициализирован, а второй инициализирован, но я не уверен, что именно создает второй.

+1

Во-вторых, это даже не массив, это единственный объект 'int'. Чтобы создать массив 'int *' с 'new', вы будете искать' int ** array = new int [60] '. – zneak

+0

Да, я только что заметил, что теперь по какой-то причине я думал, что он создаст массив. Но я прочитал документацию, и первый параметр конструктора int станет значением. – Viliami

ответ

10
int * array = new int(60); //same thing? 

Нет, это не одно и то же. array - это просто указатель здесь, а затем укажите на int с инициализированным значением 60.

Если вы имели в виду int * array = new int[60];, то array укажет на массив из 60 целых чисел, они все равно не то же самое.

Обратите внимание, что только как декларация, int* array означает, что это указатель, в то время как int* array[60] означает, что это массив (60 указателей). (Array может распадаться на указатель, т.е. int** для int* array[60], это не так же, как и int*.)

2

Возможно, вы не понимаете, что второй случай не является массивом, следующая программа печатает 60:

#include <iostream> 

int main() { 
    int* foo = new int(60); 
    std::cout << *foo << '\n'; 
    return 0; 
} 
0

Вот две фотографии, которые иллюстрируют разницу между

int * array[5]; 

и

int * array = new int(5); 

Чтобы создать указатель Int массив использование int * array = new int[5];

code,

debug view

+0

Да, предполагается, что новый int [5], новый int (5) создает только указатель int значения 5 – Viliami

-1

Чтобы понять разницу, примите во внимание, что первая строка создает 60 указателей-блок в памяти (в стеке, если вы находитесь внутри основного, например), а во втором - только указательный блок.

Оба совершенно разных типа. Например, попробуйте следующее:

array++; 

В первой строке это не работает. Во втором, все в порядке. Если вы попробуете:

array[0]++; 

В первой строке изменить первый указатель, во втором добавлении 1 к целому числу (изменение до 61).

0

Один из них создает массив, другой - нет.

int * array[60]; // Creates an array of 60 integer pointers 
Смежные вопросы