scope de las variables c

Si una variable está definida en un bloque, ¿está presente solo en el bloque o en todo el progtwig? por ejemplo

main() { int j=5; { int i=10 printf("%d",i); } printf("%d , %d ",i,j); } 

es valido

 main() { int j=5, *k; { int i=10 printf("%d",i); } k=&i printf("%d , %d ",*k,j); } 

como variable permanece en la memoria desde el punto de su statement hasta el punto en que sale la función?

El scope de una variable no global se limita al bloque en el que se define. Además, para una variable automática, una vez que el bloque termina, la vida útil de la variable ha terminado.

Considera este ejemplo tonto:

 void doit() { int *ps; int *pa; { static int s = 1; int a = 2; ps = &s; pa = &a; } // cannot access a or s here because they are out of scope // *ps is okay because s is static so it's lifetime is not over // *pa is not okay because a's lifetime ends at the end of the block } 

Su segunda línea de impresión no se comstackrá porque i no está dentro del scope.

Solo es accesible dentro del bloque, por lo que en su ejemplo, el segundo printf() es ilegal y no se comstackrá.

Sí, su scope se limita entonces al bloque donde se encuentra.

El scope de i está limitado dentro del bloque donde se declara. En tu caso es

 { int i=10 printf("%d",i); } 

Por lo tanto no es accesible fuera de este scope

Esta pregunta también se relaciona con su pregunta sobre el scope local o una variable automática. El scope se puede definir como el módulo dentro del cual se define esta variable.

Y un módulo puede ser una función o un archivo.

Por lo tanto, puede declarar una variable automática en un archivo, lo que significa que se puede acceder a cada función de ese archivo o, en otras palabras, su scope se define como el archivo en este caso.

Si declara la misma variable como auto, pero dentro de una función, significaría que solo se puede acceder a ella dentro de esa función, o su scope se define como la función en este caso.

Piense en auto como ‘local’ dentro de un módulo (donde módulo puede ser una función o un archivo).

En el ejemplo anterior, ha definido el scope agregando las llaves y, por lo tanto, el scope de la variable i se localiza dentro de las llaves, por lo que tiene acceso limitado fuera de las llaves.