Подтвердить что ты не робот

Разница между int * я и int * i

Я конвертирую файл заголовка для DLL, написанный на C в Delphi, поэтому я могу использовать DLL.

Мой вопрос в чем разница между

int* i

и

int *i

Я конвертирую первый в

i: PInteger;

Но я не уверен, что правильное преобразование для второго в Delphi.

из моего понимания первый - это простой типизированный указатель. Вторая - переменная указателя. но я не уверен, в чем разница.

4b9b3361

Ответ 1

int* i и int *i являются полностью эквивалентными

Ответ 2

Что касается C, они оба делают то же самое. Это вопрос предпочтения. int* i ясно показывает, что это тип указателя int. int *i показывает, что звездочка влияет только на одну переменную. Таким образом, int *i, j и int* i, j будут создавать i в качестве указателя int и j как int.

Ответ 3

Они одинаковы. Два разных стиля приходят из причуды в синтаксисе 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;

Ответ 4

Это случайный синтаксис 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, это то, что имеется в виду.

Ответ 5

Нет никакой разницы. Вы можете ввести его как int * i, если хотите; все они означают одно и то же: "i - указатель на int".

Ответ 6

Это то же самое.

Некоторые разработчики предпочитают нотацию int* i, так как тип я явно "указатель на int", тогда как int *i кажется менее читаемым.

Ответ 7

int* i, int * i, int*i и int *i являются абсолютно эквивалентными. Это связано с компилятором C (и совместимыми с ним системами типа C), игнорируя пустое пространство в потоке токенов, генерируемое в процессе анализа исходного кода.

Некоторые люди предпочитают использовать int* i, думая, что он делает очиститель кода (поскольку директива указателя рассматривается как часть типа в их умах). Некоторые люди предпочитают использовать int *i, думая, что он делает код более чистым (поскольку тип является int, и у них есть "указатель i" ). Ни одна из этих технологий не делает ничего по-другому после того, как компилятор работает через исходный код. Когда вы сомневаетесь, имитируйте существующий стиль.