2017-02-04 16 views
0

Вот структура:Можем ли мы вернуть структуру, содержащую массив внутри в C?

struct elem { 
    int a[100]; 
    int val; 
}; 

elem foo() { 
    elem Result; 
    Result.a[0] = 5; 
    return Result; 
} 

int main() { 
    elem aux = foo(); 
    //is Result passed back to aux, so that we can use its array? 
    cout<<aux.a[0]<<"\n"; // 5 
} 

Я знаю, что функции ча возвращать простые структуры. Могут ли они также возвращать структуры, содержащие массивы? Что происходит внутри памяти?

А также: когда мы объявляем elem Result; в функции, является ли массив, инициализированный 0, или просто принимает случайные значения?

+1

Да, мы можем !!!!! –

ответ

2

Да, вы можете, как на C, так и на C++.

Массив скопирован вместе с остальной частью структуры, которая, вероятно, медленна для больших массивов.


является массив инициализируется с 0, или он просто принимает случайные значения?

Массив не инициализирован, поэтому он содержит случайные значения.

+0

Почему массивы не возвращаются таким же образом (скопировано, когда возвращено)? –

+0

¯ \\ _ (ツ) _/¯ возможно потому, что он медленный для больших массивов, и поэтому стандарт C хочет отговорить его. – emlai

+0

@AndreiMargeloiu; Поскольку у массива есть специальная функция, которая, когда они использовались в выражении, преобразуется в указатель на его первый элемент, с некоторым исключением. Массивы не могут вернуться из функции. – haccks