2014-11-08 5 views
-5

В следующем коде выделяется массив из 10 элементов указателей, которые удваиваются.Назначение элементов в массиве

int i=0; 

double* dp[10]; 


for (int i = 0; i < 10; ++i) 
{ 
    *(dp[i]) = 0.0; 
} 
for (int i = 0; i < 10; ++i) 
{ 
    cout<< *dp[i]<< endl; 
} 

Теперь, как инициализировать каждый из этих удвоений до 0.0.

+1

Они не 'double's, как вы сказали, что они являются указателем 'double' и вы не можете инициализировать их до 0.0, а скорее 'nullptr'. – 101010

+0

Вам нужно написать цикл, который выделяет пространство для каждого двойника и инициализирует его. – Barmar

+0

Вам будет полезно использовать 'std :: vector' и/или' std :: array'. –

ответ

1

Написать цикл, который выделяет пространство для каждого двойного и инициализирует его:

for (i = 0; i < 10; i++) { 
    dp[i] = new double; 
    *(dp[i]) = 0.0; 
}; 

Вы уверены, что вам действительно нужен массив указателей, а не только массив двойников? Последнее было бы проще:

double dp[10] = {}; 

пустой список инициализатор дефолты все элементы в 0.0.

+0

Почему не просто 'std :: vector v (10, 0.0);' или 'std :: array arr {0.0};'? – 101010

+2

Потому что его вопрос касался массива указателей на парные, а не 'std :: vector'. – Barmar

+0

Не видя всего своего приложения, я не могу прокомментировать, действительно ли он должен косвенный через указатели. Поэтому я просто ответил на вопрос, как задал вопрос. – Barmar

-1

Пример с станд :: вектор:

std::vector<double*> myArray(10); 
std::fill(myArray.begin(), myArray.end(), new double(0.0)); 

(предпочитают классы из STL вместо массива C-типа в C++)

+0

Каждый элемент будет таким же, возможно, не тем, что ищет OP. что-то вроде 'std :: vector > (10, std :: vector (1, 0.0))' будет более идиоматичным и ближе к тому, что хочет OP. –

+0

Или даже 'std :: vector > (10, {0.0})' –