Я конвертирую файл заголовка для DLL, написанный на C в Delphi, поэтому я могу использовать DLL.
Мой вопрос в том, в чем разница между
int* i
а также
int *i
Я конвертирую первое в
i: PInteger;
Но я не уверен, что правильное преобразование для второго в Delphi.
из моего понимания первый – это простой типизированный указатель. Вторая – переменная указателя. но я не уверен, в чем разница.
int* i
и int *i
полностью эквивалентны
Что касается C, они оба делают то же самое. Это вопрос предпочтения. int* i
ясно показывает, что это тип указателя int. int *i
показывает, что звездочка влияет только на одну переменную. Таким образом, int *i, j
и int* i, j
будут создавать i
как int-указатель, так и j
как int.
Они одинаковые. Два разных стиля – это причуда в синтаксисе Си.
Некоторые люди предпочитают int* i;
потому что int*
– тип i.
Другие предпочитают int *i;
потому что парсер привязывает звезду к переменной, а не к типу. Это становится значимым, когда вы пытаетесь определить две переменные в строке. Независимо от того, как вы его пишете:
int* i,j; int*i,j; int *i,j;
в каждом из них i
является указателем на int, а j – просто int. Последний синтаксис делает это более ясным, хотя, даже лучше, будет:
int j, *i;
или лучше всего:
int *i; int j;
Это случайность синтаксиса C, что вы можете написать либо int *i
либо int* i
или даже int * i
. Все они анализируются как int (*i)
; IOW, *
привязан к объявлению, а не спецификатору типа. Это означает, что в объявлениях, подобных
int* i, j;
только i
объявляется как указатель; j
объявляется как обычный int. Если вы хотите объявить оба из них в качестве указателей, вам придется писать
int *i, *j;
Большинство программистов на C используют T *p
в отличие от T* p
, так как a) объявления в C являются ориентированными на выражение, а не объектно-ориентированными, и b) он более точно отражает синтаксис объявления.
Предположим, что у вас есть массив указателей на int, и вы хотите получить целочисленное значение в элементе i
. Выражение, соответствующее этому значению, равно *a[i]
, а тип выражения – int
; таким образом, объявление массива
int *a[N];
Когда вы видите, что фраза «имитация объявления использует» применительно к программированию на С, это то, что имеется в виду.
Нет никакой разницы. Вы можете ввести его как int * i
если хотите; все они означают одно и то же: «i – указатель на int».
Это то же самое.
Некоторые разработчики предпочитают нотацию int* i
так как тип i явно «указатель на int», тогда как int *i
кажется менее читаемым.
int* i
, int * i
, int*i
и int *i
абсолютно точно эквивалентны. Это связано с компилятором C (и его совместимыми системами типа C), игнорируя пустое пространство в streamе токенов, генерируемое в процессе анализа исходного кода.
Некоторые люди предпочитают использовать int* i
думая, что он делает код более чистым (поскольку директива указателя рассматривается как часть типа в их умах). Некоторые люди предпочитают использовать int *i
думая, что он делает код более чистым (поскольку тип является int, и у них есть «i-указатель»). Ни одна из этих технологий не делает ничего по-другому после того, как компилятор работает через исходный код. Когда вы сомневаетесь, имитируйте существующий стиль.