Tema: Ayuda en C
Ver Mensaje Individual
  #10 (permalink)  
Antiguo 13/08/2006, 03:08
Nivel7
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
desrreferenciar, es la caracteristica de un puntero para poder acceder al valor de la memoria (variable) apuntada.


a un puntero le puedes asignar un array;
en este caso el puntero guardaria la direccion del primer indice delarray(el inicio del array.


te comente que esa son las diferencias entre un puntero y una variable.

tal vez pienses , que ademas un puntero guarda una direccion de memoria.

pero te dire que una variable tambien lo puede hacer.

un ejemplo;(esta en C++).

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int var = 100; //declara una variable int con valor 100.
int *ptr = &var; //ptr guarda la direccion de var.
int nptr = (int)&var;//nptr tambien guarda la direccion de var
cout << (int)ptr << endl;//imprimo la direccion de var
cout << nptr << endl;//imprimo la direccion de var.
//ahora como te comente solo un puntero se puedes desrreferenciar.
cout << *ptr << endl;//desrreferenciamos para obtener el valor de var.
cout << (*(int*)nptr) << endl;//para obtener el valor de var primero tengo que convertir un int a un int* y despues hacemos desrreferencia.
cin.get();

system("PAUSE");
return EXIT_SUCCESS;
}

ahora con los arrays.

otro ejemplo:

int main(int argc, char *argv[])
{

int array[20]; //declaramos un array
int *ptr = array; //asignamos la direccion de inicio del array a ptr.
int nptr = (int)array;//hacemos lo mismo solo que ahora es un int.

cout << (int)ptr << endl;//imprimo las direcciones de memoria.
cout << nptr << endl;//se hace lo mismo.

ptr[0] = 100;//aqui esta la diferencia entre un puntero y una variable. el puntero se puede usar como si fuese un array.
cout << ptr[0] << endl;

((int*)nptr)[0] = 200;//para que una variable funcione como un array se tienen que convertir a puntero.
cout << ptr[0] << endl;
cin.get();

system("PAUSE");
return EXIT_SUCCESS;
}

bueneo en si ese el el funcionamiento y caracteristicas basicas de un puntero.

cuando te menciono lo de usar o no punteros en tu funcion, lo hago una vez aclarado que no se para que la usas, y yo supuse que para sumar dos caracteres.
se ser asi, no es necesario usarlos, no por que no se pueda o sea malo, sino por que no tienen caso.

a menos como te explico en uno de los ejemplos, que quieras que una variable externa a la funcion sea modificada.

los punteros como parametros tienen 2 propositos.

pasar parametros por rreferncia y pasar un array como parametro, este podria ser una cadena(array de caracteres).

si ninguno de estos es tu proposito es mejor usar parametros por valor.

malloc,es una funcion que recerva memoria y retorna un puntero que guarda la direccion de la memoria recervada.

la cantidad de memoria a recervar se indica en bytes o caracteres(char).

preguntas especificamente esto.

char* a = (char*)malloc(1);

lo que hago es recervar memoria para un caracter y asigno esta memoria al puntero a.
entonces el puntero a, ya tienen una memoria valida.
es muy similar a hacer.

char var;
char* a = &var;

solo que con malloc se hace dinamicamente.

y si, malloc tambien se usa para cadenas y arrays.

ejemplo;

char* cadena = (char*)malloc(20);
cadena es un array de 20 caracteres.

es muy similar a :

char array[20];
char* cadena = array;



bueno por hoy es todo.