Если цикл без условия boolen в c - PullRequest
0 голосов
/ 29 января 2019

что на самом деле происходит в операторе if здесь?

#include <stdio.h>
    int x;
    void main()
    {
      if (x)
         printf("hi");
      else
         printf("how are u");
    }

Ответы [ 4 ]

0 голосов
/ 29 января 2019

В C любое ненулевое значение эквивалентно truth, а ноль - false

Поэтому любое значение считается действительным логическим (четные указатели).

int *p = malloc(40);;
if (p) printf("Good!!");

в вашем примере x будет равен нулю (глобализированные переменные с единичными значениями обнуляются) и else printf будет выполнен.

Поскольку любое значение, которое может быть преобразовано в целое число, является действительным как логическое, мы можем записатьочень короткие функции, подобные этой:

char *strcpy(char *dest, const char *src)
{
    char *saveddest = dest;
    while(*dest++ = *src++);
    return saveddest;
}
0 голосов
/ 29 января 2019

Здесь

if (x)

принимает первую ветвь, если x не равен 0, в противном случае вторая (другая) ветвь.

0 голосов
/ 29 января 2019

Здесь int x;является глобальной неинициализированной переменнойКомпилятор инициализировал глобальную переменную int с 0. В C 0 означает false, а 1 - true.Вот почему он напечатает часть else, потому что если (0) означает false, а компилятор выполнит блок else, то есть как дела.

Пожалуйста, перейдите по ссылке для лучшего понимания:

https://www.geeksforgeeks.org/g-fact-53/

0 голосов
/ 29 января 2019

printf("hi"); запускается, если x не равен нулю, и printf("how are u"); запускается, если x равно нулю.

Условная проверка формально использует тип int в C (с любымдругой тип, неявно преобразуемый в int до оценки);не является логическим типом.

Обратите внимание, что x автоматически инициализируется равным 0 в вашем случае, так как это в global scope.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...