En una retornas el valor de cpp y en otra lo que contiene la direccion de cpp
otra duda es, con este codigo:Ahi lo que hace es crear 4 punteros en forma dinamica, no?, y si quiero crear en forma dinamica 4 punteros a punteros?
SI
Cita de: "JuanK" SI entonces la forma que mencionas para crear 4 punteros a punteros es erronea, o me equivoco?
No, lo que hace es reservar 16 bytes de memoria y asignarselos a float_values, exactamente asi es como normalmente se hace con dobles punteros.
float_values = (float***)malloc(4 *sizeof(float**));
Se reserva la memoria nada mas, lo cual, y gracias al cast, es un array de punteros sin inicializar.
y que estarias haciendo con esto?float_values = (float***)malloc(4 *sizeof(float**));
Pues yo no se, pero para mi que estamos hablando de lo mismo:
Por esa casualidad, el tamaño de un puntero y de un puntero a puntero no es el mismo?Código: Text sizeof(**float) == sizeof(***float)
¿Vos ves que alguien use triple puntero para esto en algun lado? Esa pagina lo unico que demuestra es que ni siquiera para varias dimensiones se necesita el triple puntero.
Another good use for pointers to pointers is in dynamically allocated, simulated multidimensional arrays, which we'll discuss in the next chapter.
Por esa casualidad, el tamaño de un puntero y de un puntero a puntero no es el mismo?CODEsizeof(**float) == sizeof(***float)
sizeof(**float) == sizeof(***float)
otra duda es, con este codigo:Código: Text float **float_values; float_values = (float**)malloc(4 *sizeof(float*)); Ahi lo que hace es crear 4 punteros en forma dinamica, no?, y si quiero crear en forma dinamica 4 punteros a punteros?
segun yo y otras personas para reservar cuatro punteros a puntero no necesitas un triple puntero
y si quiero crear en forma dinamica 4 punteros a punteros?
El primer grafico no representa lo que yo le dije que hiciera, te lo dejo con el codigo y tal vez lo entiendas. Hay cuatro direcciones de memoria (punteros float **) reservadas con la primera linea del codigo y estas apuntan a otras cuatro direcciones de memoria (punteros float *) reservadas en un bucle en la segunda linea. Por lo tanto tenemos 4 PUNTEROS (float **) A PUNTEROS (float*) que apuntan a cuatro valores distintos asignados en las lineas siguientes. Posteriormente vemos los valores en pantalla y liberamos primero los cuatro float * y despues los cuatro float **. ¿No es lo que muestra tu grafico, no? Eso es un puntero a puntero, eso es lo que pidio AnioN y lo que vos propones es un PUNTERO, A PUNTERO, A PUNTERO (TRIPLE PUNTERO) que obviamente contiene un PUNTERO A PUNTERO (DOBLE PUNTERO) que es lo que yo propongo. Considero entonces que estas dando una solucion mas compleja que el problema planteado.Código: Text float **float_value s= float_values = (float**)malloc(4 *sizeof(float*));for (int x= 0; x < 4; x++) { float_values[x] = (float*)malloc(sizeof(float)); }*float_values[0] = 3.51;*float_values[1] = 4.62;*float_values[2] = 5.73;*float_values[3] = 6.84;for (int x= 0; x < 4; x++) { printf("%f\r\n", *float_values[x]); }for (int x= 0; x < 4; x++) { free(float_values[x]); }free(float_values); Este grafico si representa mi codigo:Notese que puedo acceder a los datos con dos indirecciones, por algo sera, es un puntero a un puntero. ¿AnioN te parece que lo que vos querias era eso que dice JuanK? JuanK hacenos el favor y mostranos tu codigo completo que sirva para trabajar con 4 punteros a punteros.
si es como decis, en la primera linea reservas memoria para los dobles punteros, en el bucle para los punteros pero donde reservas para las variables que apuntan los punteros?
No entiendo que hace la s.