2010-09-22 41 views
26

Estoy convirtiendo un archivo de cabecera para una DLL escrita en C a Delphi para que pueda usar la DLL.diferencia entre int * i y int * i

Mi pregunta es ¿cuál es la diferencia entre

int* i 

y

int *i 

convierto el primero en

i: PInteger; 

pero no estoy seguro de lo que es la conversión correcta para el segundo en Delphi.

según tengo entendido, el primero es un simple puntero tipeado. El segundo es una variable de puntero. pero no estoy seguro de cuál es la diferencia.

+0

posible duplicado de [En C, ¿por qué es el asterisco antes del nombre de la variable, en lugar de después del tipo?] (Http://stackoverflow.com/questions/398395/), [¿Cuál es su estilo de declaración de puntero preferido, y ¿por qué?] (http://stackoverflow.com/questions/377164/) – outis

Respuesta

27

int* i y int *i son completamente equivalentes

+0

Así que la diferencia en el encabezado de la DLL es la falta de consistencia o un error tipográfico. gracias – MikeT

+0

Si vas a tomarte el tiempo de agradecer al tipo, ¿podrías aceptar su respuesta también? –

+20

lo siento, pero no pude aceptar la respuesta de inmediato debido a la respuesta tan rápida. recibí un mensaje diciéndome que solo puedo aceptar la respuesta en 11 minutos, – MikeT

4

No hay ninguna diferencia. Puede escribirlo como int * i si lo desea; todos significan lo mismo: "yo soy un puntero a un int".

44

En lo que respecta a C, ambos hacen lo mismo. Es una cuestión de preferencia. int* i muestra claramente que es un tipo de puntero int. int *i muestra el hecho de que el asterisco solo afecta a una sola variable. Por lo tanto, int *i, j y int* i, j crearían i como un puntero int y j como int.

+21

+1 para explicar la advertencia 'int * i, j' – pmg

+0

creo que ya lo sabía, pero son más de 10 años desde que hice la codificación C/C++. – MikeT

+0

No te gustan esas peculiaridades del lenguaje :-) Estoy tan contenta de haberlo olvidado por completo, pero es bueno verlo en algún lugar con una calificación alta. –

2

Es lo mismo.

Algunos desarrolladores prefieren la notación int* i porque de esta manera el tipo de i es claramente "puntero a una int" mientras que int *i parece menos legible.

+0

Tengo curiosidad por qué crees que este último es menos legible? Gracias. – johnny

2

int* i, int * i, int*i y int *i son exactamente equivalentes. Esto proviene del compilador de C (y es compatible con los sistemas similares a C) ignorando el espacio en blanco en la secuencia de tokens generada durante el proceso de analizar el código fuente.

Algunas personas prefieren usar int* i pensando que hace el código más limpio (ya que la directiva de puntero se ve como parte del tipo en sus mentes). Algunas personas prefieren usar int *i pensando que hace que el código sea más limpio (ya que el tipo es un int, y tienen un "i puntero"). Ninguna técnica realmente hace algo diferente después de que el compilador ejecuta el código fuente. En caso de duda, imite el estilo existente.

9

Son lo mismo. Los dos estilos diferentes provienen de una peculiaridad en la sintaxis C.

Algunas personas prefieren int* i; porque int* es el tipo de i.

Otros prefieren int *i; porque el analizador asocia la estrella a la variable y no al tipo. Esto solo tiene sentido cuando intenta definir dos variables en la línea. Independientemente de la forma de escribir que:

int* i,j; 
int*i,j; 
int *i,j; 

en cada uno de ellos, i es un puntero a un int, mientras que j es simplemente un int.La última sintaxis hace que la más clara, aunque, aún mejor sería:

int j, *i; 

o mejor aún:

int *i; 
int j; 
9

que es un accidente de la sintaxis de C que se puede escribir ya sea int *i o int* i o incluso int * i. Todos ellos se analizan como int (*i); IOW, el * está vinculado al declarador, no al especificador de tipo. Esto significa que en las declaraciones como

int* i, j; 

única i se declara como un puntero; j se declara como un int. Si desea declarar ambos como punteros, que tendría que escribir

int *i, *j; 

más programadores de C utilizan T *p en contraposición a T* p, ya que a) las declaraciones en C son la expresión centradas, no objeto centradas, y b) refleja más fielmente la sintaxis de la declaración.

Como un ejemplo de lo que quiero decir con expresión centrada, suponga que tiene una matriz de punteros a int y desea obtener el valor entero en el elemento i. La expresión que corresponde a ese valor es *a[i], y tipo de la expresión es int; por lo tanto, la declaración de la matriz es

int *a[N]; 

Cuando vea la frase "uso imita declaración" con respecto a la programación en C, esto es lo que se quiere decir.

Cuestiones relacionadas