c comma-operator

Operador de coma en c



comma-operator (3)

Esta pregunta ya tiene una respuesta aquí:

#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.