fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

empezar en c

143 Respuestas
16 Usuarios
0 Reactions
120.3 K Visitas
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

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.

Responder
142 respuestas
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

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).

Responder
garrocha
Respuestas: 1110
(@garrocha)
Ardero
Registrado: hace 19 años

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;

Responder
gizer20
Respuestas: 1570
(@gizer20)
Noble Member
Registrado: hace 19 años

Me parece que lo que dice garrocha es correcto

Responder
luisj
Respuestas: 235
(@luisj)
Estimable Member
Registrado: hace 18 años

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

Responder
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

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.

Responder
Página 28 / 29
Compartir: