Domingo 15 de Diciembre de 2024, 13:29
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Vector Por Valor
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Vector Por Valor (Leído 1985 veces)
AnioN
Miembro MUY activo
Mensajes: 339
Vector Por Valor
«
en:
Lunes 10 de Julio de 2006, 15:54 »
0
Hola, mi idea es saber si se puede pasar un vector a una funcion por valor?, o sea, si modifico el mismo dentro de la funcion que no se modifique en el main. Por ej:
Código: Text
#include<stdio.h>
#include<conio.h>
void vectorPuntero(int *v, int ce);
void vectorCopia(int v[], int ce);
void main() {
int vecmain[5];
int i;
for(i = 0;i < 5;i++) {
vecmain[i] = 0;
}
for(i = 0;i < 5;i++) {
printf("\nvecmain[%d] = %d",i,vecmain[i]);
}
vectorPuntero(vecmain, 5);
for(i = 0;i < 5;i++) {
printf("\nvecmain[%d] = %d",i,vecmain[i]);
}
vectorCopia(vecmain,5);
for(i = 0;i < 5;i++) {
printf("\nvecmain[%d] = %d",i,vecmain[i]);
}
printf("\nPresione una tecla para salir");
getch();
}
void vectorPuntero(int *v, int ce) {
int aux;
for(aux = 0;aux < ce;aux++) {
printf("\nv[%d] = %d", aux, *(v+aux));
}
for(aux = 0;aux < ce;aux++) {
*(v+aux) = 1;
}
for(aux = 0;aux < ce;aux++) {
printf("\nv[%d] = %d", aux, *(v+aux));
}
}
void vectorCopia(int v[], int ce) {
int aux;
for(aux = 0;aux < ce;aux++) {
printf("\nv[%d] = %d", aux, v[aux]);
}
for(aux = 0;aux < ce;aux++) {
v[aux] = 2;
}
for(aux = 0;aux < ce;aux++) {
printf("\nv[%d] = %d", aux, v[aux]);
}
}
En el codigo anterior cree dos funciones para manejar un vector, en una usando aritmetica de punteros y en el otro manteniendo la indexacion. Ambas modifican el vector del main, o sea no se pasa por valor el parametro.
Tweet
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Vector Por Valor
«
Respuesta #1 en:
Lunes 10 de Julio de 2006, 16:19 »
0
No se puede, un vector o array sólo puede pasarse a una función mediante su dirección, si quieres pasarle el valor de sus elementos deberás hacerlo pasándole uno a uno cada uno de los valores.
Un saludo.
No hay tonto más molesto que el ingenioso.
tonilope
Miembro activo
Mensajes: 51
Re: Vector Por Valor
«
Respuesta #2 en:
Lunes 10 de Julio de 2006, 17:15 »
0
Tendrás que copiar el vector en otro vector auxiliar dentro de la función que lo recibe.
Salu2
AnioN
Miembro MUY activo
Mensajes: 339
Re: Vector Por Valor
«
Respuesta #3 en:
Lunes 10 de Julio de 2006, 18:12 »
0
y con respecto a las matrices bidimensionales pasa lo mismo, no?. Por que a veces en algunas funciones se recibe una matriz asi:
Código: Text
void _matriz(int a[][12], int x, int y);
Geo
Miembro de PLATA
Mensajes: 1011
Nacionalidad:
Re: Vector Por Valor
«
Respuesta #4 en:
Lunes 10 de Julio de 2006, 18:53 »
0
Si no deseas que se modifiquen los arreglos, pásalos como constantes.
Código: Text
void vectorCopia(const int v[], int ce);
Ahora, si quieres pasar un arreglo por valor, la única forma de hacerlo es meterlo dentro de una estructura y pasar dicha estructura a la función (las estructuras y clases si pueden pasarse por valor).
Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software
|
Mexchip
carmamezo
Miembro MUY activo
Mensajes: 232
Re: Vector Por Valor
«
Respuesta #5 en:
Miércoles 12 de Julio de 2006, 11:03 »
0
Tampoco.
Los arrays bidimensionales se deben pasar igualmente por referencia no por valor.
Esa manera de definirlos permite su uso dentro de la función como arreglo y no como puntero pues la gente suele tener problemas utilizando apuntadores de apuntadores... Al final tanto asterisco vuelve loca a la gente, sobre todo porque hay que ser muy consciente de la prioridad de los operadores...:
no es lo mismo *a+1 que *(a+1)...
*a+1 = a[0] + 1;
*(a+1) = a[1];
En fin que resulta más fácil usar a[1] que *(a+1) y ya no te digo si te metes con arrays de varias dimensiones, hasta yo sudo con los punteros de punteros y de vez en cuando me lio...
Creo que era algo así... lo voy a hacer sin compilador así que si meto la pata que alguien me lo corrija sin dudarlo:
a[2][5] = *(*(a+2)+5);
Un saludo.
No hay tonto más molesto que el ingenioso.
AnioN
Miembro MUY activo
Mensajes: 339
Re: Vector Por Valor
«
Respuesta #6 en:
Miércoles 12 de Julio de 2006, 16:13 »
0
Muchas gracias.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Vector Por Valor