Задать вопрос
@sabn1k
Возможно я написал чепуху, но попытайтесь понять

Стоит ли зацикливаться на непонятной теме?

Здравствуйте.
При изучении С++ и прочтении своей почти первой книги, я наткнулся на тему, которую не понял. Функция, возвращающая указатель на массив, а также кое-что непонятно с вектором (параметр функции вектор) и ещё из того, что из списка новых стандартов. Так вот, стоит ли мне зацикливаться сейчас на этом и правда ли то, что если я не пойму этого сейчас, то никогда не пойму? Естественно, после прочтения учебника Липпмана, состоящего из 1000 страниц, я собираюсь читать отдельно и про ООП, и про СТЛ и т.д.
  • Вопрос задан
  • 278 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 3
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Поступайте более гибко. Чуть чуть теории, чуть чуть практики. Не надо бросаться абсолютно все и вся зубрить и заучивать. Пишите! Уверяю, что Вы быстро поймете насколько освоили материал, который только что прочитали, если не откладывая сразу же начнете что-нибудь писать и попытаетесь применить. Программирование это искуство, иногда некоторые логичные вещи по началу не работают и глаза на лоб лезут "А почему?" и наоборот казалось бы тупейший и нелогичный кусок кода почему-то работает.

чуть-теории - чуть-практики
Ответ написан
Комментировать
@Alexander1705
У каждой переменной есть адресс в памяти (обычное натуральное число, порядковый номер какого-нибудь байта). Когда создаёте массив, его элементы (по сути, те же переменные) рассполагаются в памяти по-порядку.
Если вы будете передавать массив по значению, вам придётся передавать функции значение каждого элемента, а их могут быть сотни и тысячи. По этому, вы можете сказать адрес первого элемента, и их количество. Зная, что остальные элементы будут рассполагаться сразу за первым, функция сможет получить доступ ко всем остальным элементам.

Уточните, если что-то непонятно, или если есть вопросы по синтаксису.

Upd.
// Функция, которая принимает массив.
void foo(int* arr, size_t n)
{
    for (size_t i = 0; i < n; ++i)
        cout << arr[i] << ' ';
}

// Функция, которая возвращает массив.
int* bar(size_t n)
{
    // Массив должен быть выделен динамически, иначе
    // он перестанет существовать после завершения этой функции.
    int* arr = new int[n];
    for (size_t i = 0; i < n; ++i)
        cin >> arr[i];

    return arr;
}

Обратите внимание, что если функция возвращает указатель на массив, последний должен быть выделен динамически. Иначе массив будет уничтожен при завершении функции, вы просто получите некорректный указатель и undefined behaviour.

P.S. Не забывайте удалять динамически выделенные массивы (delete[] arr;), после того, как они станут больше не нужны.
Ответ написан
@abcd0x00
Так вот, стоит ли мне зацикливаться сейчас на этом и правда ли то, что если я не пойму этого сейчас, то никогда не пойму?

Ты поймёшь потом, когда пройдёшь весь материал, необходимый для понимания этого. Есть такие вещи, которые непонятны без промежуточных данных.
Это как в пятиэтажном доме: чтобы подняться на третий этаж, нужно подняться на второй этаж, а чтобы подняться на второй этаж, нужно подняться на первый этаж.
Вот ты как бы с площадки между первым и вторым пытаешься подняться на третий и сам этого не понимаешь, потому что тебе кажется, что ты уже на втором.
Значит, что-то не прошёл, раз не понимаешь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@redakoc
Если зациклился, то прекращай читать и попробуй это запрограммировать.
Навыки - это главное.
Ответ написан
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
Прости и забудь
само придёт
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы