• Viernes 8 de Noviembre de 2024, 18:55

Autor Tema:  Puntero A Punteros  (Leído 8611 veces)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Puntero A Punteros
« Respuesta #25 en: Viernes 30 de Marzo de 2007, 14:53 »
0
Cita de: "Eternal Idol"
Hay cuatro direcciones de memoria (punteros float **) reservadas con la primera linea del codigo

Código: Text
  1. float **float_values = (float**)malloc(4 *sizeof(float*));
  2.  

para nada, eso no es lo que existe ahi.

El puntero NO es las 4 posiciones de memoria,
el puntero (float**) esta localizado en una posición memoria X y el contenido en esa posición de memoria es la dirección de la 'primera ' posición de memoria de 4 reservadas.

Es decir un puntero a 4 punteros.

Eso es solo un puntero apuntando a 4 punteros y esta clarisimo.


Hasta ahí es lo que se pidió en un principio...

y ahi va de nuevo, para hacer esto:

Cita de: "AnioN"
y si quiero crear en forma dinámica 4 punteros a punteros?

Se requiere lo que ya he hablado.

http://foros.solocodigo.com/index.php?showtopic=27839&st=21#
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Puntero A Punteros
« Respuesta #26 en: Viernes 30 de Marzo de 2007, 15:02 »
0
Cita de: "JuanK"
para nada, eso no es lo que existe ahi.

El puntero NO es las 4 posiciones de memoria,
el puntero (float**) esta localizado en una posición memoria X y el contenido en esa posición de memoria es la dirección de la 'primera ' posición de memoria de 4 reservadas.
Si yo reservo 16 bytes tengo cuatro direcciones de memoria, aunque no te lo creas y puedo hacer que esas apunten a cuatro nuevas direcciones de memoria que me de malloc y esas direcciones ocupan el tamaño de un float. Por lo tanto son punteros a punteros.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Puntero A Punteros
« Respuesta #27 en: Viernes 30 de Marzo de 2007, 15:06 »
0
Cita de: "Eternal Idol"
Si yo reservo 16 bytes tengo cuatro direcciones de memoria, aunque no te lo creas y puedo hacer que esas apunten a cuatro nuevas direcciones de memoria que me de malloc y esas direcciones ocupan el tamaño de un float. Por lo tanto son punteros a punteros.
Eso que tu dices es lo siguiente:

"Si reservas 16 bytes tienes 4 posiciones de memoria:" true

"puedo hacer que esas apunten a cuatro nuevas direcciones de memoria que me de malloc": true

pero tu nunca has mostrado que esas 4 apunten a 4 nuevas direcciones de memoria, eso es lo que he mostrado yo.

 "esas direcciones ocupan el tamaño de un float.": lo mismo
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Puntero A Punteros
« Respuesta #28 en: Viernes 30 de Marzo de 2007, 15:08 »
0
Cita de: "JuanK"
pero tu nunca has mostrado que esas 4 apunten a 4 nuevas direcciones de memoria, eso es lo que he mostrado yo.
Código: Text
  1.  
  2. float **float_values = (float**)malloc(4 *sizeof(float*));
  3. ZeroMemory(float_values, 4 *sizeof(float*));
  4. printf("%p\r\n", *float_values);
  5. for (int x= 0; x < 4; x++) {  float_values[x] = (float*)malloc(sizeof(float)); }
  6. printf("%p\r\n", *float_values);
  7.  
  8.  

¿Te parece que no apuntan a direcciones de memoria nueva? Primero son cero para tu informacion. ¿Si o no? ¿Necesitan usar un triple puntero?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Puntero A Punteros
« Respuesta #29 en: Viernes 30 de Marzo de 2007, 15:15 »
0
Código: Text
  1.  
  2. float **float_values = (float**)malloc(4 *sizeof(float*));
  3. for (int x= 0; x < 4; x++)
  4. {  
  5.     float_values[x] = (float*)malloc(sizeof(float));
  6. }
  7.  


si, segun tu cada float_values* (o sea cada  float_values
  • ) fuera un puntero a  un puntero:


esto

Código: Text
  1. float f = 1.2f;
  2. float *p= &f;
  3.  

seria un puntero a puntero puntero y eso es solo un puntero normal.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Puntero A Punteros
« Respuesta #30 en: Viernes 30 de Marzo de 2007, 15:41 »
0
Lo que tu citas es un puntero a 4 punteros, no 4 punteros a punteros,

float f;<- variable (que obviamente es una dirección de memoria donde se contiene el float)

float* fp;<- puntero a float, una variable que contiene una direccion de memoria, de ahi que para 'mover el puntero' se pueda hacer fp++ lo cual es aumentar el valor contenido en uno, o sea desplazarce una posicion en la direccion de memoria apuntada
 
float** fpp;-> puntero a puntero float, pero es solo un puntero que puede direccionar 4 posiciones de memoria reservadas.

Un reflexion adicional:

si tengo

Código: Text
  1. char *c;
  2.  
  3. c = (char*)malloc(10);
  4.  

esta claro que c contiene la direccion de memoria del bloque creado con malloc, pero ese bloque no es un 'bloque de punteros' es un 'bloque de caracteres'.

entonces

Código: Text
  1. char** z;
  2. z = (char**)malloc(10 * sizeof(char*));
  3.  

z tiene la dirección de un 'bloque de 10 punteros' , o sea z es un puntero a 'un bloque de 10 punteros'...
estos a su vez pueden apuntar a un 'bloques de N caracteres' cada uno.

así que tenemos solo un puntero apuntado 4punteros más.

En conclusión  z es puntero a puntero... solo 1 no 10.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Puntero A Punteros
« Respuesta #31 en: Viernes 30 de Marzo de 2007, 15:53 »
0
Cita de: "JuanK"
Lo que tu citas es un puntero a 4 punteros, no 4 punteros a punteros,

float f;<- variable (que obviamente es una dirección de memoria donde se contiene el float)

float* fp;<- puntero a float, una variable que contiene una direccion de memoria, de ahi que para 'mover el puntero' se pueda hacer fp++ lo cual es aumentar el valor contenido en uno, o sea desplazarce una posicion en la direccion de memoria apuntada
 
float** fpp;-> puntero a puntero float, pero es solo un puntero que puede direccionar 4 posiciones de memoria reservadas.

Un reflexion adicional:

si tengo

Código: Text
  1. char *c;
  2.  
  3. c = (char*)malloc(10);
  4.  

esta claro que c contiene la direccion de memoria del bloque creado con malloc, pero ese bloque no es un 'bloque de punteros' es un 'bloque de caracteres'.

entonces

Código: Text
  1. char** z;
  2. z = (char**)malloc(10 * sizeof(char*));
  3.  

z tiene la dirección de un 'bloque de 10 punteros' , o sea z es un puntero a 'un bloque de 10 punteros'...
estos a su vez pueden apuntar a '10 bloques de caracteres' cada uno.

así que tenemos solo un puntero apuntado 4punteros más.

En conclusión  z es puntero a puntero... solo 1 no 10.
exactamente es lo mismo que yo entiendo, pero no logro entender a lo que se refiere Eternal Idol.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Puntero A Punteros
« Respuesta #32 en: Viernes 30 de Marzo de 2007, 16:02 »
0
Según he tradtado de en entender
el punto de vista de Eternal Idol es que dado que

float p

es una variable y toda variable es una direccion de memoria, el hecho de tener

float f= 2.0f;
float *pf= &f;

implica que pf este apuntando a f y que como f es otra dirección de memoria entonces pf es un puntero a un puntero, cosa que no estoy de acuerdo.  &lt;_&lt;
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Puntero A Punteros
« Respuesta #33 en: Viernes 30 de Marzo de 2007, 17:17 »
0
Cita de: "JuanK"
Según he tradtado de en entender
el punto de vista de Eternal Idol es que dado que

float p

es una variable y toda variable es una direccion de memoria, el hecho de tener

float f= 2.0f;
float *pf= &f;

implica que pf este apuntando a f y que como f es otra dirección de memoria entonces pf es un puntero a un puntero, cosa que no estoy de acuerdo.  &lt;_&lt;
creo que si.