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

[SOLUCIONADO] Paso variable en funciones de unsigned

Estas en el tema de Paso variable en funciones de unsigned en el foro de C/C++ en Foros del Web. Hola buenas de nuevo...estoy trabajando en un proyecto que tengo de hacer en C y realmente no se si se puede... Tengo en el main ...
  #1 (permalink)  
Antiguo 28/11/2013, 09:00
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Paso variable en funciones de unsigned

Hola buenas de nuevo...estoy trabajando en un proyecto que tengo de hacer en C y realmente no se si se puede...
Tengo en el main una variable:
Código:
static u16* mapMemory;
Esta variable es asignada con unas funciones y pilla unos valores... la situacion es como puedo hacer para poder usar esa variable en una funcion? ya que me da errores...
he probado de mil formas
Código:
void Mover(u16 mapMemor[])
{

}
void Mover(u16 &mapMemor*)
{

}
He de decir que los valores que se ejecuten en esa funcion cambian el estado original de mapMemory por eso he de llamarlo por referencia..
Esta variable ha de estar por cojones declarada en el main...mexi
  #2 (permalink)  
Antiguo 28/11/2013, 12:11
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Paso variable en funciones de unsigned

no estoy muy seguro, pero static es como si fuera una global pero solo funciona dentro de la funcion.
No se si se puede pasar por referencia.
Es mala practica pero prueba usarla como global :/
  #3 (permalink)  
Antiguo 28/11/2013, 12:25
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Paso variable en funciones de unsigned

Si static hace que no se meta en la pila... pero entonces no hay manera de pasarla por funcion?:S
  #4 (permalink)  
Antiguo 28/11/2013, 12:33
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Paso variable en funciones de unsigned

A ver si alguien mas nos aclara eso :/
Yo es que no se decirte eso :D
  #5 (permalink)  
Antiguo 28/11/2013, 16:44
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Paso variable en funciones de unsigned

Una cosa: las variables static tiene una posicion de memoria constante; si usas una referencia no podras bloquear memoria para esa variable estatica, por lo que (a menos que me salte algo) solo puedes usarla para referenciar otros elementos del mismo tipo. Si la envias a una funcion y la haces apuntar a alguna variable de dentro de la funcion, perderá su puntero junto con el ambito (scope) de la variable de dentro de la funcion al finalizar la funcion, a menos que le asignes algo global:

Código C:
Ver original
  1. void set(U16 *m) {
  2.     U16 dato = 100;
  3.     *m = dato;
  4.     //ahora 'm' vale 100
  5. }
  6.  
  7.  
  8. int main() {
  9.     static U16 *m;
  10.  
  11.     set(&m);
  12.     printf("%d", *m);//violacion de segmento
  13.  
  14.     ...
  15. }

En la funcion set asignas el valor de la direccion de memoria de 'dato' a 'm'; hasta aquí todo bien, el problema está en que al finalizar la funcion la variable 'dato' se destruye (termina su ambito) y la posicion de memoria que usaba (a la que ahora apunta 'm') deja de ser accesible por la aplicacion, significa que después de finalizar la funcion la variable 'm' apunta a una direccion de memoria no valida y cualquier operacion posterior sobre esa direccion (ya sea asignacion o lectura) provoca una violacion de segmento. Eso solo funciona con variables globales o con memoria dinamica.

Para que quieres usar un puntero estatico?

Saludos
vosk
  #6 (permalink)  
Antiguo 29/11/2013, 02:29
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Paso variable en funciones de unsigned

static u16 *mapMemory

Con esto has declarado mapMemory como un puntero a tipo u16.

Para poder usar esa variable en una función, depende de lo que quieras hacer. Si lo que quieres es que la función, tras el proceso que sea, le asigne un valor, hay dos opciones:

- Que la función te devuelva un puntero a u16. Por ejemplo:

Código C:
Ver original
  1. u16 *MiFuncion (lista_de_parametros);   // Prototipo
  2.  
  3. u16 *MiFuncion (lista_de_parametros)    // Implementacion
  4. {
  5.     u16 *ptr;
  6.     // Aqui vendría el código...
  7.     return ptr;
  8.     // Conviene devolver NULL si el cálculo del puntero ha fallado
  9. }
  10.  
  11. mapMemory = MiFuncion (lista_de_parametros);    // Utilizacion
  12. // OJO: Comprobar que el puntero retornado no es NULL

- Modificar el valor dentro de la función. Tendrías que pasar el puntero por referencia, es decir, con un puntero a puntero:

Código C:
Ver original
  1. void MiFuncion (u16 **ptr);     // Prototipo
  2.  
  3. void MiFuncion (u16 **ptr)      // Implementación
  4. {
  5.     // Aqui vendría el código...
  6.     *ptr = valor_calculado
  7. }
  8.  
  9. MiFuncion (&mapMemory);     // Utilización

Si lo que quieres es que la función trabaje con el valor al que apunta mapMemory, simplemente:

Código C:
Ver original
  1. void MiFuncion (u16 *ptr);      // Prototipo
  2.  
  3. void MiFuncion (u16 *ptr)       // Implementacion
  4. {
  5.     // Aqui vendría el código...
  6.     *ptr = resultado_del_proceso;
  7. }
  8.  
  9. MiFuncion (mapMemory);      // Utilizacion

En este último caso, tienes que asegurarte de que mapMemory tiene previamente un valor legal, de lo contrario te encontrarás con una violación de segmento.

Saludos,
  #7 (permalink)  
Antiguo 29/11/2013, 09:14
vib
 
Fecha de Ingreso: marzo-2011
Mensajes: 43
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Paso variable en funciones de unsigned

Dios! menudo curro
Enserio te lo agradezco mucho!
La funcion sirve para llenar la variable static, si eso hare que se llene la variable y luego que haga un return y la iguale al static...
Muchisimas gracias enserio, me ha servido para aprender un poco mas en este mundo!!!
:)

Etiquetas: funcion, funciones, paso, variable
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 01:42.