Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#1941
Un array es un puntero. La diferencia es, que en evz de apuntar a 1 variable, apunta a un conjunto de variables, una delante de otra (en memoria).

Cita de: snake_linux en 25 Agosto 2015, 14:07 PM

char nombre[10];
char *nombre;


¿Es lo mismo?

No, no lo es. El primero tiene 10 chars de memoria. El segundo, solo es un puntero.
A nivel práctico sí, ambos son punteros. Pero para utilizar el segundo como puntero, tienes que reservarle memoria:

char *nombre;
nombre = (char*) malloc(sizeof(char) * 10);

Con eso, igualamos el puntero a una dirección de memoria que contiene 10 char.

Para acceder a cada uno, utilizas el operador []:
nombre[5] = 'C';

Si utilizas malloc para reservar memoria, luego tienes que liberarla:
free(nombre);
#1942
Cita de: snake_linux en 25 Agosto 2015, 09:51 AM
Por otro lado me da cosa aprender C++ por que entonces, junto con python y php serían 4 lenguajes... y no se, parece ya demasiado

Más aprenderás si sigues programando ;D!
Que al fin y al cabo, lo que diferencia un lenguaje de otro, es la sintaxis, los paradigmas y las librerías, no más.
#1943
En memoria, un array es un conjunto de elementos colocados uno delante de otro.
Al hacer "array[ x ]", accedes a la posición X en memoria. Ese X es un entero, que puede ser una constante, una variable, o el retorno de una función, mientras sea un entero.

También puedes crear un array de tamaño dinámico así:

int *array = (int*)malloc(sizeof(int)*5);


Como dato:
int array[5];
*(array + 2*sizeof(int)) == array[2];


Cita de: FKT en 24 Agosto 2015, 20:49 PM
Tengo dificultades para comprenderlo la verdad, si no hay ninguna posicion que se llame indice por ejemplo porque no existe, entonces que pinta el array ?

Visto lo anterior, verás que, al acceder a una posición de memoria inexistente, 1 de 2: o da error, o muestra/sobreescribe memoria que tendrá valores teóricamente desconocidos.
#1944
http://www.minidosis.org/
C++, uno de los lenguajes que más te servirán.
#1945
Programación C/C++ / Re: Detener thread en C++
24 Agosto 2015, 13:32 PM
El código es incorrecto. Le tienes que pasar el bool como referencia, sinó tendrá un valor inmutable.

Código (cpp) [Seleccionar]
thread ok(trabaja, &on, a);

trabaja(bool *on, string a)


o


Código (cpp) [Seleccionar]
thread ok(trabaja, ref(on), a);

trabaja(bool &on, string a)


"ok.get()"? "ok.join()"
#1946
Programación C/C++ / Re: Mejorar sintaxis.
24 Agosto 2015, 13:29 PM
Cita de: FKT en 24 Agosto 2015, 12:40 PM
Por cierto los vectores son lo mismo que un array?
Si te refieres a "vector" dentro del lenguaje, es de C++.

El problema de ese código, es que creas el array, pero no lo usas.

Lo importante de un array, es que se puede iterar por él. Se puede acceder a sus elementos en un bucle, cosa que con variables diferentes no puedes:
Código (cpp) [Seleccionar]
int i, array[10];
for(i=0; i<10; i++)
    printf("%i", array[i]);


Si quieres implementar un array en ese código, haz un bucle que encuentre el número más grande.
#1947
Programación C/C++ / Re: duda con cin.ignore()
24 Agosto 2015, 13:25 PM
El problema de "cin<<", es que deja saltos de linea en el buffer de entrada sin leer. Cuando tratas de usar getline, coge esos saltos de linea, y no te deja meter datos. Con "cin.ignore()", eliminas esos saltos de linea.

Para leer en consola, te recomiendo usar siempre, salvo casos especiales:
Código (cpp) [Seleccionar]
string line;
getline(cin, line);


De ese modo, siempre obtendrás una cadena, y el buffer será limpiado correctamente.

Ahora bien, en caso por ejemplo, de que quieras interpretar la cadena como un entero, tienes las funciones:
Código (cpp) [Seleccionar]
int i = stoi(line); // String to int
unsigned long ul = stoul(line); // String to int
long long ll = stoll(line); // String to long long
float f = stof(line); // String to float
double d = stod(line); // String to double
long double ld = stod(line); // String to long double


Son de la librería <string>. Aquí puedes verlas todas: http://www.cplusplus.com/reference/string/

De este modo, utilizas siempre getline, y evitas utilizar cin<< y cin.ignore.
#1948
Lo ideal es que hagas eso para enviarlo, y luego, puedes utilizar Float.intBitsToFloat(int bits)

Esa función transforma un entero de 4 bytes (la cadena de bytes), a float.
Tendrías que transformar los 4 bytes que recibes en Java a un int.
Esto último lo puedes hacer rápido con ByteBuffer:
Código (java) [Seleccionar]
ByteBuffer bb = ByteBuffer.wrap(array); // array = 4 bytes float
// bb.order(ByteOrder.LITTLE_ENDIAN);
int n = bb.getInt();


"Little endian" y "big endian" son las formas de las que se guarda en memoria los datos, sin ir más lejos.

La linea comentada "order()", depende de si utilizas LITTLE_ENDIAN o BIG_ENDIAN. Por ejemplo, Windows utiliza little-endian. Bueno, solo puede ser LITTLE_ENDIAN y BIG_ENDIAN, en el peor de los casos, prueba y averigua cual es xD
#1949
En cuanto multiplicas un float, puede perder precisión, o puede perder valores en caso de que se salga del máximo.

Pero, ¿para qué multiplicarlo?
¿Qué quieres hacer con ese float?
Si haces:
float fl = 4.56;
char * floatBytes = &fl;


Tendrás en "floatBytes" un arreglo de 4 chars, que serán los valores del float en memoria. Luego ya si quieres, los copias o haces lo que quieras con ellos.

Pero... ¿Qué pretendes hacer?
#1950
Código (cpp) [Seleccionar]
new int(2)
Eso es para crear 1 int inicializado a 2.

Código (cpp) [Seleccionar]
new int[2]
Así es.


Y bueno, del segundo código comentar, que no aseguras de ningún modo que la variable 'c' seguirá existiendo cuando el thread acceda a ella.