Рубрики

Вывод программ на C | Набор 3

Прогнозировать выход нижеуказанной программы.

Вопрос 1

#include <stdio.h>

int main()

{

  printf("%p", main);

  getchar();

  return 0;

}

Выход: адрес функции main.
Объяснение: Имя функции на самом деле является переменной-указателем на функцию и печатает адрес функции. Таблица символов реализована следующим образом.

struct 
{
   char *name;
   int (*funcptr)();
}
symtab[] = {
   "func", func,
   "anotherfunc", anotherfunc,
}; 

вопрос 2

#include <stdio.h>

int main()

{

   printf("\new_c_question\by");

   printf("\rgeeksforgeeks");

  

   getchar();

   return 0;

}

Выход: гиксфоргекс
Объяснение: Сначала printf печатает «ew_c_questioy». Во втором printf есть / r, поэтому он возвращается к началу строки и начинает печатать символы.

Теперь попробуйте напечатать следующее без использования escape-символов.

new c questions by
geeksforgeeks

Вопрос 3

# include<stdio.h>
# include<stdlib.h>

  

void fun(int *a)

{

    a = (int*)malloc(sizeof(int));

}

  

int main()

{

    int *p;

    fun(p);

    *p = 6;

    printf("%d\n",*p);

     

    getchar();

    return(0);

}

Это не работает. Попробуйте заменить «int * p;» на «int * p = NULL;», и он попытается разыменовать нулевой указатель.

Это потому, что fun () создает копию указателя, поэтому, когда вызывается malloc (), он устанавливает скопированный указатель в ячейку памяти, а не в p. p указывает на случайную память до и после вызова fun (), и когда вы разыменовываете его, он падает.

Если вы хотите добавить память к указателю из функции, вам нужно передать адрес указателя (т.е. двойной указатель).

Спасибо Джону Доу за правильное решение.

Вопрос 4

#include <stdio.h>

int main()

{

    int i;

    i = 1, 2, 3;         

    printf("i = %d\n", i);

  

    getchar();

    return 0;

}

Выход: 1
Вышеприведенная программа выводит 1. Ассоциативность оператора запятой слева направо, но оператор = имеет более высокий приоритет, чем оператор запятой.
Поэтому утверждение i = 1, 2, 3 обрабатывается компилятором как (i = 1), 2, 3.

Теперь должно быть легко узнать вывод программы ниже.

#include <stdio.h>

int main()

{

    int i;

    i = (1, 2, 3);         

    printf("i  = %d\n", i);

  

    getchar();

     return 0;

}

Вопрос 5

#include <stdio.h>

int main()

{

    int first = 50, second = 60, third;

    third = first / * Будет ли этот комментарий работать? * / + second;

    printf("%d /* And this? */ \n", third);

       

    getchar();

    return 0;

}

Выход: 110 / * И это? * /
Объяснение: Компилятор удаляет все, что находится между «/ *» и «* /», если их нет в двойных кавычках («»).

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

Вывод программ на C | Набор 3

0.00 (0%) 0 votes