Misma variable que global y local en C

Recibo la respuesta i = 2. ¿Pero mi pregunta es qué le pasó a i = 0? Según mi entendimiento, i = 0 estará en SEGMENTO DE DATOS I = 2 estará en SEGMENTO DE PILA

#include  int i = 0; void main() { int i = 2; printf("i value is %d\n",i);` } 

La variable local i oculta la variable global i . Por lo tanto, cuando lo imprima, imprimirá la variable local.

Si desea modificar la variable global, puede usar la idea mencionada aquí:

¿Cómo puedo acceder a una variable global sombreada en C?

Sombrear Su variable global i = 0 está sombreada por i = 2 local.

No lo hagas, evita las colisiones de nombres.

Por cierto, void main() {} no es C estándar (suponiendo que su progtwig se ejecute en un entorno alojado, es decir, encima de un sistema operativo). Use int main(void) { return 0; } int main(void) { return 0; } lugar Referencia. Otro.

Ha declarado una variable local con el mismo nombre que su variable global, ocultándola haciendo que i (cuando se usa dentro del mismo ámbito donde se ha declarado su variable local) se refiera a su variable local en lugar de a la variable global.

La solución más natural y lógica para esto es: Evite hacerlo siempre que sea posible.

Es el ámbito de aplicación variable trabajando aquí. Si se declaran múltiples variables del mismo tipo, se accederá al operador disponible con el scope más cercano.

La resolución del scope ocurrirá en el tiempo de comstackción. Cuando el comstackdor busca cualquier statement de variable cuando se accede al código, primero buscará en el ámbito más cercano y luego subirá. La variable global, será accedida en último lugar.