2014-01-04 13 views
1

У меня есть следующие сомнения в C++. Мы знаем, что мы можем инициализировать указатель в момент декларации следующим образом:Инициализация для указателя на целочисленный массив

int *p = new int(8) 
cout<<*p<<endl; 

Это будет производить вывод, как и 8. Аналогично, если мы объявляем указатель на целочисленный массив:

int *p = new int[10]; 

И это может быть инициализировано как:

p[0] = 7 
p[1] = 9; 

Но есть ли способ инициализировать в точке объявления?

ответ

3

Использование C++ 11 вы можете использовать инициализацию распорка:

int *p = new int[10] { 7, 9 }; // And so on for additional values past the first 2 elements 
0

Да, если вы хотите, чтобы инициализировать массив 1,2,3,4, например, вы можете написать:
ИНТ [] MyArray = {1,2,3,4}

+1

Это нормально, если, как здесь, вы хотите выделить массив с помощью 'new'. –

0

Да, вы можете сделать, как это

int *p = new int[3] {4,5,6}; 
1

Yo мог бы использовать "{}" следующим образом:

int main() 
{ 
    int *p = new int[10]{1,2,3,4,5,6,7,8,9,10}; 

    cout << p[7] << endl; 
    return 0; 
} 

Отвод будет 8, соответствующий положению 7 массива.

Примечание: это решение на основе C++ 11.

+2

Предполагается, что C++ 11 ... –

+0

Да, я предполагаю, что это плохо, я его отредактирую. – Netwave

0

Как другие сказали, что вы можете использовать C++ 11 инициализации списка {}

Или вы можете перегрузить new [] и инициализировать массив, что-то вроде следующего:

#include <iostream> 

void* operator new[](std::size_t sz, int *arr) 
{ 
    void* p = operator new[](sz); 
    int *ptr= (int *)p; 
    std::size_t i=0; 

    for(;i<sz;++i) 

     ptr[i] = arr[i]; 

    return p; 
} 

int main() 
{ 

    int arr[] ={1,2,3,4,5,6,7,8}; 
    int* p = new(arr) int[8]; 

    for(int i=0;i<8;i++) 
    std::cout<<p[i] << std::endl; 

    delete[] p; 
} 
Смежные вопросы