2013-09-27 2 views
0

У меня есть функция, которая должна возвращать указатель на массив:Возвращаясь указатель на массив C++

int * count() 
{ 
    static int myInt[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    return &myInt[10]; 
} 

внутри моей главной функции Я хочу, чтобы отобразить один из Интс из этого массива, как здесь индекс 3

int main(int argc, const char * argv[]) 
{ 
    int myInt2[10] = *count(); 

    std::cout << myInt2[3] << "\n\n"; 
    return 0; 
} 

это, однако, дает мне ошибку: «массив инициализатор должен быть список инициализатора»

как создать массив в пределах моей основной функции, которая использует указатель, чтобы получить тот же Elemen ts как массив у указателя?

+0

использование вектора или станд :: массив вместо – taocp

+1

Массивы и указатели равнозначны, но не то же самое. См. FAQ по C: http://c-faq.com/aryptr/aryptrequiv.html – kfsone

+0

Чувак, я не имею в виду, что это покровительственно, но этот код испорчен по многим причинам. На самом деле лучше всего читать книгу. Я бы рекомендовал язык программирования C (Kernighan & Ritchie); который имеет лучшее объяснение указателей, с которыми я когда-либо сталкивался, и в равной степени применим к C++ в этом отношении. Вы знаете в конце главы о указателях, почему int myInt [10] = * count() не может делать то, что вы хотите. – Bathsheba

ответ

4

Несколько проблем в вашем коде:

1) необходимо вернуть указатель на начало массива в счете:

return &myInt[0]; 

или

return myInt; //should suffice. 

Тогда, когда ты инициализировать myInt2:

int* myInt2 = count(); 

Вы можете также скопировать один массив в другой:

int myInt2[10]; 
std::copy(count(), count()+10, myInt2); 

Примечание копирование создать второй массив, используя отдельную память, чем первый.

+0

Это может быть то, что нужно OP, но оно не отвечает именно на заданный вопрос. OP хочет массив в своей основной функции и в своей другой функции. Поэтому в какой-то момент элементы массива должны быть скопированы из одного массива в другой. – john

+0

Хороший комментарий, я добавил примечание о копировании массива в новый. – pippin1289

1

Вам не нужны указатели, ссылки в порядке.

int (&count())[10] 
{ 
    static int myInt[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    return myInt; 
} 

int main(int argc, const char * argv[]) 
{ 
    int (&myInt2)[10] = count(); 

    std::cout << myInt2[3] << "\n\n"; 
    return 0; 
} 
Смежные вопросы