Рубрики

Выход программы C | Набор 17

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

Вопрос 1

#include<stdio.h>

  
#define R 10
#define C 20

  

int main()

{

   int (*p)[R][C];

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

   getchar();

   return 0;

}

Вывод: 10 * 20 * sizeof (int), который равен «800» для компиляторов с целым размером 4 байта.
На указатель p снимается ссылка, следовательно, он возвращает тип объекта. В данном случае это массив целых чисел. Таким образом, он печатает R * C * sizeof (int).
Спасибо Venki за предложение этого решения.

вопрос 2

#include<stdio.h>
#define f(g,g2) g##g2

int main()

{

   int var12 = 100;

   printf("%d", f(var,12));

   getchar();

   return 0;

}

Выход: 100
Оператор ## называется « Вставка токена» или «Оператор слияния» . Он объединяет два токена в один токен. Итак, после предварительной обработки основная функция становится следующей и печатает 100.

int main()

{

   int var12 = 100;

   printf("%d", var12);

   getchar();

   return 0;

}

Вопрос 3

#include<stdio.h>

int main() 

{

   unsigned int x = -1;

   int y = ~0;

   if(x == y)

      printf("same");

   else

      printf("not same");

   printf("\n x is %u, y is %u", x, y);

   getchar();

   return 0;

}

Вывод: «same x — MAXUINT, y — MAXUINT», где MAXUINT — максимально возможное значение для целого числа без знака.
-1 и ~ 0 по существу имеют одинаковую битовую комбинацию, следовательно, x и y должны быть одинаковыми. В сравнении y переводится в unsigned и сравнивается с x. Результат «такой же». Однако при интерпретации со знаком и без знака их числовые значения будут отличаться. х равен MAXUNIT, а у -1. Так как у нас есть% u для y, выходные данные будут MAXUNIT и MAXUNIT.
Спасибо Venki за объяснение.

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

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

Выход программы C | Набор 17

0.00 (0%) 0 votes