Operador de coma en c
comma-operator (3)
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué hace el operador de coma, hacer? 8 respuestas
#include<stdio.h>
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}
salida: 2
¿Alguien puede explicar cómo la salida es 2?
¿Alguien puede explicar cómo la salida es 2?
Debido a que la prioridad del operador de asignación ( =
) es mayor que el operador de coma ( ,
).
Por lo tanto, la declaración:
a = (1, 2), 3;
es equivalente a:
(a = (1, 2)), 3;
y la expresión (1, 2)
evalúa como 2
.
¿Alguien puede explicar cómo la salida es 2?
En la declaración
a = (1, 2), 3;
,
utiliza un operador de coma . Debido a la mayor precedencia de operadores de =
operator que de ,
operator, la expresión operando (1, 2)
se unirá a =
as
(a = (1, 2)), 3;
En el caso de un operador de coma, el operando izquierdo de un operador de coma se evalúa como una expresión vacía, luego se evalúa el operando derecho y el resultado tiene el valor y el tipo del operando derecho .
Hay dos operadores de coma aquí. Para el primer operador de coma en la expresión (1, 2)
, 1
se evaluará para anular la expresión y luego 2
se evaluará y se asignará a a
.
Ahora se han producido efectos secundarios a a
y, por lo tanto, se evaluará el operando derecho del segundo operador de coma 3
y el valor de la expresión (a = (1, 2)), 3
será 3
.
el resultado de:
a = x, y => x
a = (i, j) => j
por lo tanto, si tenemos:
x = (1 , 2)
a = (1 , 2) , 3 => 2
Como se dice aquí :
El operador de coma separa las expresiones (que tienen valor) de manera análoga a la forma en que el punto y coma termina las sentencias, y las secuencias de expresiones se incluyen entre paréntesis de manera análoga a las secuencias de las sentencias entre llaves: (a, b, c) es una secuencia de expresiones, separadas por comas, que se evalúan hasta la última expresión c while {a; segundo; c;} es una secuencia de sentencias y no se evalúa en ningún valor. Una coma solo puede aparecer entre dos expresiones - expresiones separadas por comas - a diferencia del punto y coma, que aparece al final de una instrucción (sin bloque) - las declaraciones de terminación de punto y coma.
El operador de coma tiene la precedencia más baja que cualquier operador C, y actúa como un punto de secuencia. En una combinación de comas y puntos y comas, los puntos y coma tienen una precedencia más baja que las comas, ya que los puntos y coma comillas separadas pero dentro de las declaraciones, que concuerdan con su uso como puntuación ordinaria: a, b; c, d se agrupa como (a, b); (c, d) porque estas son dos declaraciones separadas.
Espero que esto responda tu pregunta.