Рубрики

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

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

Вопрос 1

int fun(char *str1)

{

  char *str2 = str1;

  while(*++str1);

  return (str1-str2);

}    

  

int main()

{

  char *str = "geeksforgeeks";

  printf("%d", fun(str));

  getchar();

  return 0;

}

Выход: 13
Внутри fun () указатель str2 инициализируется как str1, а str1 перемещается до достижения значения «/ 0» (примечание ; после цикла while). Таким образом, str1 будет увеличен на 13 (при условии, что char занимает 1 байт).

вопрос 2

void fun(int *p)

{

  static int q = 10;

  p = &q;

}    

  

int main()

{

  int r = 20;

  int *p = &r;

  fun(p);

  printf("%d", *p);

  getchar();

  return 0;

}

Выход: 20
Внутри fun (), q является копией указателя p. Таким образом, если мы изменим q, чтобы указать что-то еще, то p останется неизменным.

Вопрос 3

void fun(int **p)

{

  static int q = 10;

  *p = &q;

}    

  

int main()

{

  int r = 20;

  int *p = &r;

  fun(&p);

  printf("%d", *p);

  getchar();

  return 0;

}

Выход 10

Обратите внимание, что мы передаем адрес p в fun (). p в fun () — это указатель на p в main (), и мы меняем значение на p в fun (). Таким образом, p из main изменяется на точку q fun (). Чтобы лучше это понять, давайте переименуем p в fun () в p_ref или ptr_to_p

void fun(int **ptr_to_p)

{

  static int q = 10;

  *ptr_to_p = &q;  / * Теперь p main указывает на q * /

}

Также обратите внимание, что программа не вызовет никаких проблем, потому что q является статической переменной. Статические переменные существуют в памяти даже после возврата функций. Для автоматической переменной мы могли бы увидеть странный вывод, потому что автоматическая переменная может не существовать в памяти после возврата функций.

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

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

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

0.00 (0%) 0 votes