Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cambiar arreglo por funcion usando punteros

Estas en el tema de Cambiar arreglo por funcion usando punteros en el foro de C/C++ en Foros del Web. Buenas, estoy intentando entender punteros y pues me gustaria que me ayuden a saber porque no funciona, a ver si mi analisis es correcto : ...
  #1 (permalink)  
Antiguo 28/02/2009, 06:56
 
Fecha de Ingreso: octubre-2008
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 2
Cambiar arreglo por funcion usando punteros

Buenas, estoy intentando entender punteros y pues me gustaria que me ayuden a saber porque no funciona, a ver si mi analisis es correcto :

le paso la direccion de memoria del arreglo, recorro y aumento para poder ponerlos todos en 0

Código:
#include <iostream>

void funcion(int *pX)
{	
	int i = 0;
	
	for(; i < 3; i++)
	{
		*pX = 0
		*pX++;
	}
}

int main()
{
	int X[3] = {1, 5, 25};
	
	funcion(&X);
	
}
  #2 (permalink)  
Antiguo 28/02/2009, 08:33
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Cambiar arreglo por funcion usando punteros

Haciendo el casting necesario (funcion((int*)&X);) me funciona tal como queres.

PD. pX++; tiene mas sentido, no necesitas desreferenciar el puntero.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 28/02/2009, 08:55
 
Fecha de Ingreso: octubre-2008
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Cambiar arreglo por funcion usando punteros

Cita:
Iniciado por Eternal Idol Ver Mensaje
Haciendo el casting necesario (funcion((int*)&X);) me funciona tal como queres.

PD. pX++; tiene mas sentido, no necesitas desreferenciar el puntero.
no entiendo porque el int* se supone que cuando llamo a la funcion le estoy pasando la direccion de memoria y en la funcion como tal no necesito ponerle el aspersan..

esto es lo que me dice
Cita:
programa.cpp: In function ‘void funcion(int*)’:
programa.cpp:10: error: invalid operands of types ‘int’ and ‘int*’ to binary ‘operator*’
programa.cpp: In function ‘int main()’:
programa.cpp:18: error: cannot convert ‘int (*)[3]’ to ‘int*’ for argument ‘1’ to ‘void funcion(int*)’
  #4 (permalink)  
Antiguo 28/02/2009, 09:21
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Cambiar arreglo por funcion usando punteros

Me olvidaba, tambien ponele el ; final a *pX = 0; (pense que era un error de copy + paste).

Código:
#include <iostream>

void funcion(int *pX)
{	
	int i = 0;
	
	for(; i < 3; i++)
	{
		*pX = 0;
		pX++;
	}
}

int main()
{
	int X[3] = {1, 5, 25};	
	funcion((int*)&X);	
}
Tenes que hacer el casting ya que tenes un array de 3 enteros y no un puntero a int, es lo que dice el compilador sobre la linea 18.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 28/02/2009, 09:29
 
Fecha de Ingreso: octubre-2008
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Cambiar arreglo por funcion usando punteros

muchas gracias amigo ya entendi, tengo que convertir a un puntero que apunta a un entero la direccion de memoria del arreglo
  #6 (permalink)  
Antiguo 28/02/2009, 09:38
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Cambiar arreglo por funcion usando punteros

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:10.