Что напечатает этот код?

Опубликовано Mar 18, 2012 в Разбор примеров кода | 5 коммент.

,

Что напечатает этот код?

Этот пост начинает новую рубрику вопросов на собеседовании, которые содержат задачи по анализу существующего кода. Первое задание очень простое, но тем не менее позволяет проверить понимание основ.
Итак, классический вопрос: Что напечатает этот код?

#include 
 
void dosomething( int n, int &k )
{
    k -= 5;
    --n;
}
 
int main()
{
    int n = 5;
    int k = 10;
 
    dosomething( n, k );
 
    printf( "n=%d &k=%d\n", n, k );
}

Автор публикации:

5 Коммент. : “Что напечатает этот код?”

  1. Было бы хорошо добавить еще один аргумент функции типа int*.
    Так же, думаю, стоит проверить понимание – какое значение содержит не инициализированная переменная на стеке.
    Допустим так:
    int n = 5;
    int k = 10;
    int x; // not initialised
    dosomething( n, k, &x );

    В качестве хороших вспомогательных вопросов можно спросить – сколько стековой памяти будет использоваться при вызове этой функции?

    • По идее, для этой задачи ожидали развёрнутый ответ, а не вбить и посмотреть, что получится. XD

      • Конечно, ответ ожидали, может быть, не столько развернутый, сколько без компьютера. Это задача, понятное дело, для собеседования на бумаге.

  2. Вывод на экран будет следующим: n=5 &k=5
    n=5 потому, что является аргументом, передаваемым по значению. Таким образом, функция dosomething( int n, int &k ) работает с локальной копией n, никак не влияя на оригинал из функции main().
    k=5 потому, что передаётся в dosomething( int n, int &k ) по ссылке.

Оставить комментарий

Ваш адрес email не будет опубликован.


*