Рубрики

Вывод программ на C | Комплект 9

Прогнозировать выход следующих программ.

Вопрос 1

int main()

{

 int c=5;

 printf("%d\n%d\n%d", c, c <<= 2, c >>= 2);

 getchar();

}

Вывод: зависит от компилятора
Порядок оценки параметров не определен стандартом C и зависит от реализации компилятора. Никогда не безопасно зависеть от порядка оценки параметров. Например, вызов функции, подобный выше, может очень хорошо вести себя по-разному от одного компилятора к другому.

Ссылки:
http://gcc.gnu.org/onlinedocs/gcc/Non_002dbugs.html

вопрос 2

int main()

{

    char arr[] = {1, 2, 3};

    char *p = arr;

    if(&p == &arr)

     printf("Same");

    else

     printf("Not same");

    getchar();

}    

Выход: не то же самое
& arr является псевдонимом для & arr [0] и возвращает адрес первого элемента в массиве, но & p возвращает адрес указателя p.
Теперь попробуйте программу ниже

int main()

{

    char arr[] = {1, 2, 3};

    char *p = arr;

    if(p == &arr)

     printf("Same");

    else

     printf("Not same");

    getchar();

}    

Вопрос 3

int main()

{

    char arr[] = {1, 2, 3};

    char *p = arr;

    printf(" %d ", sizeof(p));

    printf(" %d ", sizeof(arr));

    getchar();

}    

Выход 4 3
sizeof (arr) возвращает объем памяти, используемый всеми элементами в массиве
а sizeof (p) возвращает объем памяти, используемый самой переменной указателя.

Вопрос 4

int x = 0;

int f() 

{

   return x; 

}

  

int g() 

   int x = 1; 

   return f(); 

}

  

int main()

{

  printf("%d", g());

  printf("\n");

  getchar();

}  

Выход: 0
В C переменные всегда имеют статическую (или лексическую) область видимости. Привязка x внутри f () к глобальной переменной x определяется во время компиляции и не зависит от того, кто ее вызывает. Следовательно, выход для вышеуказанной программы будет 0.

Кроме того, Perl поддерживает как динамическую, так и статическую область видимости. Ключевое слово Perl «my» определяет статически ограниченную локальную переменную, в то время как ключевое слово «local» определяет динамически ограниченную локальную переменную. Таким образом, в Perl аналогичная (см. Ниже) программа выведет 1.

$x = 0;

sub

   return $x

}

sub

   local $x = 1; return f(); 

}

print g()."\n";

Ссылка:
http://en.wikipedia.org/wiki/Scope_%28programming%29

Пожалуйста, напишите комментарии, если вы найдете какие-либо из приведенных выше ответов / объяснений неверными.

Рекомендуемые посты:

Вывод программ на C | Комплект 9

0.00 (0%) 0 votes