В 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;
}