Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Explicación declaración (https://www.clubdelphi.com/foros/showthread.php?t=53576)

Guillermo80 24-02-2008 13:47:07

Explicación declaración
 
Os dejo una duda facilita, se trata de una declaración que no me queda muy clara que vi en un código, a ver si me podéis interpretar qué significa:

Cita:

static Integer pcm[1024];
static Integer *pcm_[2] = { pcm, pcm+1024 };
Mi interpretación y mi pregunta es: si pcm es un array de enteros, *pcm_[2] un array de punteros a enteros, ¿cómo diablos hace esa asignación directa:

Cita:

*pcm_[2] = { pcm, pcm+1024 }
?

No sé por qué mete en una posición del array de punteros el valor pcm, si es a su vez un array de enteros, cuando sólo podría asignarle enteros. :confused:

escafandra 24-02-2008 14:09:48

Si. pcm_ es un array de punteros a int de dimensión 2.
Hace la asignación directa. Primer valor pcm. que es un array de 1024 enteros.
Como quiere tener dos arrays consecutivos de 1024 int la asignación la hace asi. Primer elemento pcm_[0] = pcm. Segundo pcm[_1] = pcm+1024.

Este tipo de asignaciones directas en C++
Código:

static Integer *pcm_[2] = { pcm, pcm+1024 };
se pueden hacer perfectamente.

static Integer *pcm_[2] = { pcm, pcm+1024 }; no se refiere al elemneto[2] sino es la "declaración - asignación directa".
Por otro lado [2] no puede existir (solo se declara tamaño 2).

Saludos.

Guillermo80 24-02-2008 18:00:34

Muchas gracias Escafandra, m eha sido muy útil la aclaración, yo no estaba seguro. Aún así me encuentro con un problema, y es que, si bien está aclarado que podría asignar el primer elemento así:

Cita:

pcm_[0] = pcm.
Al intentar hacer esto mismo con el segundo elemento:

Cita:

pcm[_1] = pcm+1024.
No puedo hacerlo en Delphi, y tiene que ser algo en realidad extraño, porque se le está sumando a un array de punteros a entero el valor 1024 para todas las posiciones del array (hace eso, ¿no?). La única manera que se me ocurre de resolverlo es crearme un bucle que vaya incrementando ese valor para toda la tabla y almacenarlo en pcm_[1]. ¿Se te ocurre alguna solución mejor o si se puede esquivar este problema?

escafandra 24-02-2008 19:02:10

Código:

pcm[_1] = pcm+1024
Me imagino que pcm[_1] está equivocado y que pones pcm_[1].

En C, puedes hacer la asignación como propones, después del tiempo de declaración. Da lo mismo.

En Delphi probablemente el problema lo tienes en la aritmética de punteros. En C los punteros los sumas o restas tranquilamente. puedes sumar a un puntero un int significando que ahora apunta a p+int posición.

No se mucho de pascal, pero creo que la aritmética de punteros no es tan directa como en C. o necesitarás una sintaxis especial. Investiga el tema.

EDITO:

La artimetica de punteros en C es sensible al tipo. No es lo mismo:
Código:

char *C;
int *I;

(char*)(C+2) != (char*)(I+2);

La suma de un entero a un puntero equivale a sumar posiciones al puntero, no a su valor. Asi:
Código:

int *I;
int *N = I+2;
*N == I[2];  //El valor de N equivale al tercer elemento del array I;

Saludos.


La franja horaria es GMT +2. Ahora son las 20:56:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi