Probé el código que se proporciona a continuación y descubrí que en realidad imprime "sí", lo que significa que la matriz de caracteres se toma como verdadera en la declaración if. Pero me pregunto cuál es la razón. Quiero decir que es una matriz, así que devolvió la "cadena" completa. O devolvió su primer elemento que es "s", o devolvió su ubicación de memoria que se procesa como verdadera, ya que cualquier cosa que no sea 0 es verdadera.
char a[] = "string"; if (a) { printf("yes"); }if (a) En este contexto, una referencia a una matriz decae en un puntero al primer valor de la matriz. Lo mismo sucedería si se pasara a como un parámetro de función.
Entonces, aquí, a es solo un puntero. Y dado que no es un puntero nulo, esto siempre se evalúa como verdadero.
char a[6] = "string"; Esto no es realmente relevante, pero esta cadena literal tiene siete caracteres, no seis, por cierto. Te olvidaste del \0 final.
"string" es en realidad un literal const char[7] en C++ y una constante char[7] en C. Tenga en cuenta que en C++, no puede asignarlo a un char[6] ya que debe proporcionar espacio para el terminador NUL. Sin embargo, puede omitirlo en C.
a decae a un puntero de tipo char* .
En cualquier idioma, ese valor de puntero no puede ser 0 o implícitamente convertible a false . Entonces, por lo tanto, el cuerpo del if se ejecuta.
En matrices de estilo C como char a[2] = "go"; el identificador de la matriz decae automáticamente en un puntero. Y dado que a apunta a una ubicación en la memoria (es decir, no es NULL o 0 ), la condición de su declaración if siempre se evaluará como true .