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

sobre punteros y funciones

Estas en el tema de sobre punteros y funciones en el foro de C/C++ en Foros del Web. Varias preguntas: 1. Se puede asignar a un puntero una cadena d esta forma? char cad[10]; char *p=cad; 2. Porque para asignarle a un puntero ...
  #1 (permalink)  
Antiguo 24/11/2006, 17:58
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
sobre punteros y funciones

Varias preguntas:

1. Se puede asignar a un puntero una cadena d esta forma?
char cad[10];
char *p=cad;

2. Porque para asignarle a un puntero a int un valor no hay q reservar memoria dinamica y para un puntero a char si?
ej:
int *p=8; // estaria bien, no?
char *p='a'; // estaria mal, igual q para cadenas, no?

3.
Porque no se puede pasar parametros asi?:
int *a=2,*b=3;
funcion(*a,*b); //llamada con el valor que contenga la dirreccion de //memoria apuntada, en este caso (2,3);
int funcion( a,b){} // sindo a,b variables q contendran 2 y 3.

Porque tampoco se puede hacer esto?:
funcion(&a,&b); // llamada con direcciones de memoria de a y b
int funcion(a,b){} //siendo a y b variables, q contienen las direcciones de //memoria de a y b de la funcion main

Porque si se puede hacer al reves?
funcion(a,b);
int funcion(&a,&b){}

4. Cuando tu defines un puntero dentro de una funcion, no se destruye al retornar ésta al contrario q las variables?? conserva su direccion de memoria y su valor? es esto una ventaja de los punteros? Con que funcion se podian liberar? cuando reservas memoria dinamica con malloc, es recomendarla liberarla siempre con free??

Saludos.
  #2 (permalink)  
Antiguo 24/11/2006, 18:59
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
1. Sí, pero no consigues más que una copia de un puntero, no una copia de la cadena.

2. No, no está bien ni con int ni con char. Su uso es el de apuntar, no el de guardar datos.

3. Que no, que los punteros no sirven para lo que pretendas. Usa un int normal, no un puntero a int.

4. Cada vez te lías más ;)

5. Un puntero no se destruye ni se deja de destruir. Te confundes con los arrays.

Por favor, revisa tus conocimientos sobre punteros y no trates de lanzarte a preguntar cosas más "avanzadas" sin haber entendido las bases.
  #3 (permalink)  
Antiguo 25/11/2006, 14:38
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
1.- Despeus de lo que pusiste p y cad son exactamente lo mismo punteros a una misma cadena.

2.- Siempre hay que reservar memoria en un puntero, mas sin embargo lo que tu intentas hacer es usa r el puntero como una variable lo cual mmmm no serviria de nada.

3.-Para que quieres hacer eso?

4.- Cuando tu defines un puntero y reservas memoria con el, al terminar la funcion el puntero se destruye como cualquier variable, pero la memoria reservada sigue reservada y pues se pierde porque ya no sabes donde quedo lo cuale s un desperdicio para todo el sistema.

Saludos
  #4 (permalink)  
Antiguo 25/11/2006, 21:46
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
MaxExtreme, creo que esto es la base...

3. No pretendo nada con eso, solo saber si se puede hacer. Lo unico que pense, es que si *p=5 y a=5, siendo puntero y variable , pues podias pasar el 5 asi "funcion(*p)" o asi "funcion(a)", pero solo lo preguntaba por curiosidad, no porque pretenda hacer nada con eso, y de paso entender mejor los punteros...

Saludos.
  #5 (permalink)  
Antiguo 26/11/2006, 10:44
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
MaxExtreme, creo que esto es la base...
Precisamente por eso puse temas más "avanzados", entre comillas. Si quieres, llámalo la base de la base.

De cualquier manera, si preguntas eso, es que te falta aun por aprender lo anterior. ¿Por qué no pruebas tú mismo si funcionan o no en vez de venir aquí?
  #6 (permalink)  
Antiguo 26/11/2006, 11:31
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Cita:
Precisamente por eso puse temas más "avanzados", entre comillas. Si quieres, llámalo la base de la base.

De cualquier manera, si preguntas eso, es que te falta aun por aprender lo anterior. ¿Por qué no pruebas tú mismo si funcionan o no en vez de venir aquí?
Pues en cierto punto MaxExtreme tiene razon. Todavia necesaitas aprender mas sobre la base de la base......
Si tienes bien claro en la mente que hacen los operadores * y & entonces te sera mas facil entender cualquier sentencia con punteros, pero primero hay que aprender lo mas mas basico, y no estar de prueba y error.

saludos
  #7 (permalink)  
Antiguo 26/11/2006, 17:52
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Cita:
Iniciado por MaxExtreme Ver Mensaje
¿Por qué no pruebas tú mismo si funcionan o no en vez de venir aquí?
Realmente, mas que saber si funcionan o no, lo que pregunto es el porque... Y si, puede que tenga lagunas en "la base de la base", y no sera por no leer, por eso pregunto, en cualquier caso intento leer manuales, buscar en google,etc..., antes de preguntar, pero es dificil encontrar respuestas concretas, y los manuales no me aclaran la "base de la base". Bueno, en cualquier caso, gracias a Instru y MaxExtreme por reponder.

Saludos.
  #8 (permalink)  
Antiguo 29/11/2006, 15:56
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno entonces investiga cosas concretas para obtener respuestas concretas.

Busca el funcionamiento concreto de los operadores que te mencione y tambien busca de manera concreto la aritmetica de punteros.
Con eso ya tienes la base biene stablecida.

Saludos
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 07:30.