Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 24-02-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.

Última edición por escafandra fecha: 24-02-2008 a las 14:12:30.
Responder Con Cita
  #3  
Antiguo 24-02-2008
Avatar de Guillermo80
Guillermo80 Guillermo80 is offline
Miembro
 
Registrado: may 2007
Posts: 87
Poder: 18
Guillermo80 Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 24-02-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.

Última edición por escafandra fecha: 26-02-2008 a las 14:23:13. Razón: Aclaracion aritmetica de punteros
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
explicacion acerca del registro CFPA86 Varios 1 19-01-2008 17:59:44
Necesito una pequeña explicacion b3nshi Varios 2 20-08-2007 03:20:17
Una pequeña explicacion!! magnu9 SQL 3 11-12-2006 11:05:00
Breve explicacion de uso de PHP valera Internet 2 24-01-2006 23:17:17
Explicacion del DBlookUpCamboBox MRSAM Conexión con bases de datos 2 14-12-2004 16:57:37


La franja horaria es GMT +2. Ahora son las 00:43:34.


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