Ответ 1
int* i
и int *i
являются полностью эквивалентными
Я конвертирую файл заголовка для 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.
Они одинаковы. Два разных стиля приходят из причуды в синтаксисе C.
Некоторые люди предпочитают 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) он более точно отражает синтаксис объявления.
В качестве примера того, что я подразумеваю под выражением-centric, предположим, что у вас есть массив указателей на int, и вы хотите получить целочисленное значение в элементе i
. Выражение, соответствующее этому значению, равно *a[i]
, а тип выражения - int
; таким образом, объявление массива
int *a[N];
Когда вы видите, что фраза "имитация объявления использует" в отношении программирования C, это то, что имеется в виду.
Нет никакой разницы. Вы можете ввести его как int * i
, если хотите; все они означают одно и то же: "i - указатель на int".
Это то же самое.
Некоторые разработчики предпочитают нотацию int* i
, так как тип я явно "указатель на int", тогда как int *i
кажется менее читаемым.
int* i
, int * i
, int*i
и int *i
являются абсолютно эквивалентными. Это связано с компилятором C (и совместимыми с ним системами типа C), игнорируя пустое пространство в потоке токенов, генерируемое в процессе анализа исходного кода.
Некоторые люди предпочитают использовать int* i
, думая, что он делает очиститель кода (поскольку директива указателя рассматривается как часть типа в их умах). Некоторые люди предпочитают использовать int *i
, думая, что он делает код более чистым (поскольку тип является int, и у них есть "указатель i" ). Ни одна из этих технологий не делает ничего по-другому после того, как компилятор работает через исходный код. Когда вы сомневаетесь, имитируйте существующий стиль.