Un puntero como sabran es una dirrecion a la memoria.
Bueno la cosa es que esa dirrecion puede asignar a una variable int y de hecho asi lo hacemos todos sin darnos cuenta vean el siguiente ejemplo y reflexionen sobre este asunto.
Lo siguiente lo pondre en C++ ya que me es mas comodo xP pero sirve de igual manera en ANSI C.
Código: Seleccionar todo
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char str_msg[99] = "infrAngeluX-Soft\0";
int int_msg = (int)&str_msg[0];
cout << "Dirrecion en memoria:\n\t" << int_msg << endl;
cout << "Contenido:\n\t" << (char*)int_msg << endl;
cin.get();
return 666;
}
Código: Seleccionar todo
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char str_msg[99] = "infrAngeluX-Soft\0";
char* int_msg = &str_msg[0];
cout << "Dirrecion en memoria:\n\t" << int_msg << endl;
cout << "Contenido:\n\t" << *int_msg << endl;
cin.get();
return 666;
}
En ocaciones uno hace esto en algunos compiladores:
Código: Seleccionar todo
#include <stdlib.h>
#include <stdio.h>
int main()
{
char * xd;
xd = (char *) malloc( 6);
xd = "Donuts";
printf("%s",xd);
getchar();
}
Por que?
* La constante "Donuts" al ya estar en uso en el codigo o programa por ende esta en memoria y como sabran TODO lo que esta en memoria tiene una dirrecion entonces se deduce lo siguiiente:
Si es un compilador o IDE Descontinuado entonces No causara errores en ninguna linea aun que el compilador arreglas orrores asi
El codigo anterior lo corregira mientras compila a este simple codigo:
Código: Seleccionar todo
#include <stdlib.h>
#include <stdio.h>
int main()
{
char * xd;
xd = (char *) malloc( 6);
xd = (char*)"Donuts"; // <--- Le agrega un Casting....
printf("%s",xd);
getchar();
}
SI usan malloc o cualquier funcion para obtener espacio o asignacion de memoria entonces es por que:
1.- La llenara el usuario
2.- Se llenara Dinamicamente por codigo
3.- Se COPIARA contenido por medio de otras funciones ( Por ejemplo memcpy(); )
4.- Cualquier mezcla de las anteriores u otras que sean I/O.
continuare mas tarde este escrito..
Otra forma para ver por que esta mal usar asi malloc es este ejemplo de la vida
* Vas a una pizerria y reservas un asiento ( xd = (char *) malloc( 6); )
* Llega un amigo y que lleva a su asiento ( xd = (char*)"Donuts" )
y que paso con el asiento que pediste, pues nada se quedo vacio. la forma de solucionarlo es no usar malloc o usarlo junto con memcpy()
Con el Casting (OJO lo que se le haga a el contenido del apuntador se vera afectado en la constante)
Código: Seleccionar todo
#include <stdio.h>
int main()
{
char * xd;
xd = (char *)"Donuts";
printf("%s",xd);
getchar();
}
Código: Seleccionar todo
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char * xd;
xd = (char *) malloc( 6); // No es nesesario... asi que fuchila...
memcpy( xd, "Donuts", 6 ); // Aprovechamops el espacio generado por malloc
printf("%s",xd);
getchar();
}
.