Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola, quisiera que me recomendarais algun programa, gratuito si es posible, para compilar y programar en c, y saber si se puede hacer programas en c, que ademas de escribir texto en pantalla pueda manejar graficos, crear entorno grafico propio y similares (como los entornos graficos de un videojuego) y como se puede programar que se muestren imagenes en pantalla con c. Igualmente agradeceria cualquier referencia a manuales lo mas completos posibles sobre programacion en c, preferiblemente en castellano.
Gracias por cualquier ayuda que me podais ofrecer.
Es posible que me halla equivocado. ¿Cuál es el error que te da el compilador? ¿Qué código pusiste que te funcionaba?
S2
Ranganok Schahzaman
Pues el compilador me da error cuando pongo algo como:
int *p;
p= 10;
pero poniendo (int *) delante del 10 me deja compilar:
int *p;
p= (int *) 10;
Y el error que da el compilador es de asignacion incompatible o algo asi (da error solo en el primer caso).
esque si no recuerdo mal esa asignacion es incorrecta, es decir "p" es un puntero, por lo que contiene una dirección de memoria a un dato, es decir "p" no es estrictamente el dato, sino un puntero que te dice donde esta el dato, por tanto el uso correcto (si no recuerdo mal) seria:
int *p;
&p=10;
Me parece que lo que dice garrocha es correcto
Lo que pasa es que aun no tienes claro el concepto de puntero. Todas las variables son datos, sí, pero tienen su tipo. Para que lo entiendas imaginate una ciudad en la que tenemos los siguientes tipos de datos...
Edificio: Esto contiene la información de un edificio
DireccionDeEdificio: Evidentemente, la dirección de un edificio
Plaza: La información de una plaza
DireccionDePlaza: La dirección de una plaza
Ahora supón:
Edificio e;
DireccionDeEdificio de;
e = "Edificio rojo de doce pisos";
de = "Calle Ramon Ramirez nº4";
Eso está bien, pero no puedes decir lo siguiente:
de = "Edificio verde de tres pisos";
Un edificio no es una dirección de edificio, son cosas distintas... Es como si alguien te pregunta donde vives y le dices que tu edificio es blanco y de 8 pisos.
Pues en C/C++ en vez de tener int y direccionDeInt, tenemos int e int *. ¿Por qué? Pues porque puede ser que quieras guardar en algún sitio la dirección de la dirección de la dirección de un edificio y de otra forma quedaría muy largo, así simplemente sería int ***i.
De esta forma tu cógido sería algo así como:
int *i; // La variable 'i' guarda la DIRECCION de un número
i = 10; // La dirección es 10
Ciertamente esto puede tener sentido, y depende del compilador que uses puede ser que compile y simplemente te de un aviso. Pero aunque compilase, creo que lo que querías hacer no es especificar que el entero se encuentra en la posición número 10 de memoria.
Te pongo un poco de código comentado:
int a; // Creamos un entero 'a'
int *da; // Creamos una dirección de entero 'da'
a = 5; // 'a' vale 5
da = &a // 'da' vale "la dirección de 'a'"
*da = 6 // El entero que debe haber en la dirección 'da' ahora vale 6
Un poco más interesante, pero tampoco mucho:
int aa[2]; // Creamos un array de enteros 'aa'. 'aa' no es un entero, es un array de enteros, y por ello el valor de 'aa' es la dirección del primero de esos enteros.
int *da; // Creamos una dirección de entero 'da'
aa[0] = 5; // 'aa[0]' vale 5
da = aa // 'da' vale 'aa', que es la direccion de aa[0]
*(da+1) = *da+1 // Al entero que debe haber en una posición mas allá de 'da' le asignamos el valor de la suma del entero que debe haber en la posición 'da', más 1
Espero no haberte liado más
Luisj, entonces poner delante del 10 (int *) esta bien para indicar al compilador que al puntero le estoi asignando la direccion de memoria 10 y que me deje compilar, ¿no?, los punteros los tengo bien y no me has liado, pero creo queno entendistis bien la duda, trabajar con punteros del modo:
int *i, e;
i= &e;
es algo que ya lo tenia mas que controlado, lo unico que dudaba era de como asignar en vez de la direccion de memoria de una variable, sino darle un valor que yo quiera (como 10, aunque esa cifra la puse solo de ejemplo, de lo que sea esa direccion no tengo ni idea).
Gracias por todo.