Hola a todos. He hecho un ejercicio que consiste en "Escriba un programa que compruebe la diferencia entre una variable global, una variable local y un argumento de función.", como no tenía ni idea, he copiado tal cual el código para ver si compilar el resultado me aclaraba algo, pero nada de nada, estoy leyendo y no comprendo como funciona la diferencia entre una variable global, una variable local y un argumento de función. Agradecería si alguien me explica las diferencias partiendo del ejemplo. La teoría la he leído en el mismo tutorial y si la comprendo, pero en este ejemplo no veo para nada la similitud con la teoría.

// Ejemplo de variable global, local y argumento de función
#include <stdio.h>

int vglobal=100; //Se ve en todo el fichero y debe ir con extern dentro de la declaración en las funciones
void suma1(int x);
void suma2(int x);

main(){
	extern int vglobal;
	int vlocal=200;
	printf("\nLa variable vglobal en main vale = %d\n",vglobal);
	printf("\nLa variable vlocal en main vale = %d\n",vlocal);
	suma1(vlocal);
	
	/*En salida no se ha modificado su valor pese a que en suma1
	se hagan operaciones con vlocal (argumento)*/
	
	printf("\nLa variable vglobal despues de suma1 vale = %d\n",vglobal);
	printf("\nLa variable vlocal despues de suma1 vale = %d\n",vlocal);
	suma2(vlocal);
	
	printf("\nLa variable vglobal despues de suma2 vale = %d\n",vglobal);
	printf("\nLa variable vlocal despues de suma2 vale = %d\n",vlocal);
	
}

void suma1(int x){
	extern int vglobal;
	++x;
	++vglobal;
	printf("\nLa variable vglobal dentro de suma1 vale = %d\n",vglobal);
	printf("\nEl argumento (vlocal) dentro de suma1 vale = %d\n",x);
	return;
}

void suma2(int x){
	extern int global;
	++x;
	++vglobal;
	printf("\nLa variable vglobal dentro de suma2 vale = %d\n",vglobal);
	printf("\nEl argumento (vlocal) dentro de suma2 vale = %d\n",x);
	return;	
}
Gracias.
Es bastante simple, las variables globales se pueden utilizar en todo el proyecto mientras que las variables locales sólo 'viven' dentro del bloque donde se ha llamado y los argumentos de función son las variables que se utilizan para llamar a las funciones.

En el código que has expuesto, un ejemplo de variable global sería 'int vglobal;', de variable local sería 'int vlocal;' y de argumento de función son los 'int x' de las funciones 'suma1' y 'suma2'.
A ver... bueno, entiendo lo que has comentado, lo que me cuesta es verlo en el código.

Cuando en main, la variable "vlocal" siempre da lo mismo, pese a que dentro de las funciones "suma1" y "suma2" se sume 1, al mostrarla por pantalla dentro de la función "main" se muestra como si no se hubiera modificado. Eso es lo que quiere explicar el ejemplo ¿no?, que las funciones globales si se modifican fuera de "main" luego dentro de ésta continua modificada, encambio, las variables locales, aunque se modifiquen en otra función, seguirán siempre con el mismo valor si no se modifican en "main" ¿más o menos funciona así?

Gracias Blau
También puedes diferenciarlas por su dirección de memoria, el operativo reserva aparte de la pila para las variables locales, parámetros etc y el heap para asignar memoria dinámicamente, si el lenguaje permite el uso, una tercera zona de Datos para alojar las variables globales, constantes etc.

Código: Seleccionar todo

#include <stdio.h>

char global_no_init[100]; // Global sin inicializar
long global_init      = 0x13; // Global inicializada
void add_param(long);

int main(){
	int local_init    = 30; // Local inicializada
	int local_no_init;
	printf("Dirección de global inicializada: %p\n",&global_init);
	printf("Dirección de global sin inicializar: %p\n",&global_no_init);
	printf("Dirección de local inicializada : %p\n",&local_init);
	printf("Dirección de local sin inicializar : %p\n",&local_no_init);
	addr_param();
   return 0;
}


void addr_param(long param){
	printf("Dirección de parámetro: %p\n",&param);
}
Un saludo :)
Responder

Volver a “C/C++”