Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soser en 2 Septiembre 2010, 05:12 am



Título: Paso de parametros por referencia...funciones
Publicado por: soser en 2 Septiembre 2010, 05:12 am
Bueno, pues la duda que tengo es sobre el paso de parametros por referencia, trato de hacer un programa que simule el funcionamiento de una pila y una cola con funciones del tipo void, es decir incremento el tope(que en si es el puntero) para asi determinar pero pues no me hace nada, este es el codigo, me podrian decir si mi codigo esta mal o tal vez planteo mal la logica...como digo el problema es con el puntero, quiero que se incremente el valor de i en 1 para indicar el tope pero pues no mas no quiere...
Código:
//programa que simula el funcionamiento de una pila y una cola
#include<stdio.h>
void insertar(int pico[],int *i,int ele)
{
pico[*i]=ele;
*i++;
}
int borra(int pila[],int *i)
{
int x,y;
x=*i;
y=pila[x];
*i--;
return y;
}
int main()
{
int pila[8];
int cola[8];
int i,j,opc,ele,h;

printf("Ingresa 5 elementos para la pila:\n ");
for(i=0;i<5;i++)
{
scanf("%d",&pila[i]);
}
printf("\n\n");
printf("Ingresa 5 elementos para la cola:\n");
for(j=0;j<5;j++)
{
scanf(" %d",&cola[j]);
}
do{
printf("---Selecciona una opcion---\n");
printf("1.Insertar un elemento en la pila\n");
printf("2.Insertar un elemento en la cola\n");
printf("3.Eliminar un elemento en la pila\n");
printf("4.Eliminar un elemento de la cola\n");
printf("5.Mostrar pila\n");
printf("6.Mostrar cola\n");
printf("7.Pila llena\n");
printf("8.Cola llena\n");
scanf(" %d",&opc);
switch(opc)
{
case 1:
printf("Ingresa elemento a insertar:\n");
scanf(" %d",&ele);
if(i<8){
insertar(pila,&i,ele);
for(h=0;h<i;h++)
{
printf("%d",pila[h]);
}
}
printf("\n\n");
break;

case 2:
printf("Ingresa elemento a insertar:\n");
scanf(" %d",&ele);
if(i<8){
insertar(cola,&j,ele);
for(h=0;h<j;h++)
{
printf("%d",cola[h]);
}
}
printf("\n\n");
break;

case 3:
printf("Se eliminara elemento\n");
ele=borra(pila,&i);
printf("El elemento borrado de la pila fue%d\n\n",ele);
break;

default:
if(opc!=0)
printf("Nunca mencione tener esa opcion...\n");
}

}while(opc!=0);


}
como veran aun no esta terminado pero pues aun asi...
desde ya, gracias...


Título: Re: Paso de parametros por referencia...funciones
Publicado por: do-while en 2 Septiembre 2010, 14:43 pm
ˇBuenas!

Me parece que el misterio esta en la precedencia de los operadores. ++ y -- tienen mayor prioridad que *, por lo tanto, al hacer:
Código
  1. *ptr++;
  2.  
primero incrementa el puntero y luego lo desreferencia.

Esto lo arreglas con unos parentesis:
Código
  1. (*ptr)++;
  2.  
y el problema se soluciona.

ˇSaludos!


Título: Re: Paso de parametros por referencia...funciones
Publicado por: soser en 2 Septiembre 2010, 22:33 pm
Gracias... problema solucionado...