Comunidad Underground Hispana  
Visita: Descargas - Foro de juegos - Articulos - Juegos Gratis - Download Free

Retroceder   Comunidad Underground Hispana > Programacion > Carbide C/C#/C++

Tema Cerrado Crear Nuevo Tema
 
Share LinkBack Herramientas Desplegado
Antiguo 30-ene-2010, 13:57   #1
Member
 
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Predeterminado [Solucionado] [C] Pasar un arreglo como parametro por referencia

Hola que tal! tengo una pequeña duda que seguro que me ayudan :P

Como hago para pasar un vector a[n] como parametro por referencia en una funcion?

he leido de varios libros pero lo unico que he conseguido son ejercicios con punteros (y a pesar que entiendo un poco todo, no termino de asimilarlo). jejejeje xD
kndidox está desconectado  
Antiguo 31-ene-2010, 00:39   #2
Moderador
 
Avatar de Fashion
 
Fecha de Ingreso: junio-2007
Mensajes: 1.764
Predeterminado

Cita:
Iniciado por kndidox Ver Mensaje
Hola que tal! tengo una pequeña duda que seguro que me ayudan :P

Como hago para pasar un vector a[n] como parametro por referencia en una funcion?

he leido de varios libros pero lo unico que he conseguido son ejercicios con punteros (y a pesar que entiendo un poco todo, no termino de asimilarlo). jejejeje xD
Si "n" es un valor fijo, puedes hacer lo siguiente:

Código:
#include <stdio.h>

void imprimir(char cad[30])
{
	printf("%c\n", cad[0]);
	printf("%s\n", cad);
}

void main()
{
         // n = 30  
	char a[30] = "Hola como estas";
	imprimir(a);	
}
Si "n" es un valor no fijo, tienes que usar punteros y hacer lo siguiente:

Código:
#include <stdio.h>

void imprimir(char *cad)
{	
	char *p = cad;
	printf("%c\n", *p++);
	
	printf("%s\n", cad);
	
	while(*cad != '\0')
		printf("%c", *cad++);
	printf("\n");
}

void main()
{	
	int n; // longitud
	printf("ingrese Longitud de cadena:");	
	scanf("%d", &n);
	fflush(stdin);
	char *a = new char[n];
	printf("ingrese palabra:");	
	//scanf("%s", a); // Sin espacios en blanco	
	scanf("%[^\n]", a); //Con espacios en blanco
	fflush(stdin);
	imprimir(a);
}
__________________
Fashion está desconectado  
Antiguo 31-ene-2010, 06:59   #3
Member
 
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Predeterminado

Disculpa, quede en las mismas, como haría yo para hacer para llenar un arreglo de números enteros? el caso que me pusiste con caracteres, ya le habías agregado un valor. Yo lo que quiero es pasar el arreglo totalmente vacío y que me devuelva el arreglo con los valores resultantes de la función. Como tengo que definir los parámetros?
kndidox está desconectado  
Antiguo 31-ene-2010, 07:48   #4
Senior Member
 
Fecha de Ingreso: marzo-2007
Mensajes: 477
Predeterminado

A ver, si lo que quieres tu es pasar un arreglo (con cantidad conocida de elementos) para ser llenado, es fácil:

Código:
void llenar_arreglo(int *arreglo)
{
    int i;
    for(i=0; i < TAMANIO_ARREGLO; i++){
        arreglo[i] = i;
    }
}
Eso es así, pues en C un arreglo puede interpretarse como un puntero al primer elemento. Ahora, si lo que quieres es, por ejemplo, pasar para que la función cree y llene un arreglo y vos le pases el tamaño como parámetro, se complica. Un código como éste no funcionaría:
Código:
void crear_y_llenar_arreglo(int *arreglo, size_t cantidad)
{
    arreglo = (int*)malloc(sizeof(int) * cantidad);
    int i;
    for(i=0; i < cantidad; ++i){
        arreglo[i] = i;
    }
}
¿por qué?, pues C no conoce pasaje de por referencia, lo que hace un programador en C es pasar un puntero, y en la función escribes en esa dirección de memoria. Ahora, ¿qué pasa cuando necesitas modificar el valor de un puntero?, debes pasar un puntero a puntero (para "emular" la referencia):
Código:
void crear_y_llenar_arreglo(int **arreglo, size_t cantidad)
{
    *arreglo = (int*)malloc(sizeof(int)* cantidad);
    int i;
    for(i=0; i < cantidad; ++i){
        *arreglo[i] = i;
    }
}
La función es a modo de ejemplo, no es muy bueno crear una función de ese estilo.
ajr784 está desconectado  
Antiguo 31-ene-2010, 11:05   #5
Member
 
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Predeterminado

Ya consegui hacer lo que queria jejeje, me sirvio de mucho sus explicaciones, aunq tuve que leer como 17 veces el capitulo de arreglos del libro de deitel jejeje por fin el consegui entenderlo :P

Solucionado!!!
kndidox está desconectado  
Tema Cerrado

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



La franja horaria es GMT -5. Ahora son las 08:41.



Juegos gratis Underground Mexico Veo Descargas Songs Traducidas Videos De Musica Conservacion Tabs Metal
Noticias
 Juegos De Coche juegos gratis online juegos Utilidades Trucos
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.2
Traducción por vBHispano.com