C/Visual C - AYUDA: Función void

 
Vista:

AYUDA: Función void

Publicado por Ramón (6 intervenciones) el 27/03/2016 11:47:39
Mi primera duda es saber si void es una función. La segunda es saber si los datos enviados a "void" son por valor o por referencia, me explico:
Si por ejemplo quisiera leer los datos de una matriz cuadrada de orden "n" en un arreglo "matriz[n][n]", llamo a la función "leerMatriz", la función hace lo que deba hacer y no regresa ningún valor. Pero si modifico un dato en la función "leerMatriz" y luego lo muestro en la función principal (main), lo que veo es que efectivamente se modificó el valor, siendo que al pasar valores a una función los valores originales no se pueden modificar puesto que hace una copia de los valores originales.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
void leerMatriz(int n, int matriz[][n]);
 
int main(){
	int n;
	puts("El orden es:");
	scanf("%i", &n);
 
	int matriz[n][n];
	leerMatriz(n, matriz);
	printf("El valor de (1,1) es de %i\n", matriz[0][0]);
	return 0;
	}
 
void leerMatriz(int n, int matriz[][n]){
	int i, j;
	for(i=0; i<n; i++)
		for(j=0; j<n; j++){
			printf("(%i,%i) = ", i+1, j+1);
			scanf("%i", &matriz[i][j]);
			};
	matriz[0][0] = 6;
	}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

AYUDA: Función void

Publicado por Martín (18 intervenciones) el 28/03/2016 20:54:47
1) No, void no es una función, es una palabra que quiere decir "nada", o "de ningún tipo"; por ejemplo, la declaración
1
void leerMatriz(int n, int matriz[][n]);
quiere decir que la función leerMatriz no devuelve nada.

2) Está claro entonces que si esto es lo que significa "void", no puedes pasarle parámetros.

Pero entiendo que tu pregunta se refiere a por qué leerMatriz() modifica el valor de matriz[0][0], si es que la matriz le fue pasada por valor.

Porque en realidad el segundo parámetro int matriz[][n] no es una copia de la matriz declarada en main() sino un puntero a esa matriz. En C, al pasar un array como parámetro de función, este "decae" en puntero, en un puntero al primer elemento del array. Es por eso que la función leerMatriz() también necesita el tamaño del array, que le pasas en int n, de otro modo no podría saber cuántos elementos tiene ese array del que le pasaron sólo su puntero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA: Función void

Publicado por Ramón (6 intervenciones) el 29/03/2016 08:17:00
En verdad, gracias. Me ha aclarado mis dudas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar