В чем разница между int* ptr и int *ptr в C? [дубликат]

Я новичок в C и я не знаю разницу между следующими двумя переменными объявления:

int* ptr;
int *ptr;

Я думаю, что в декларации int* ptr;, ptrзначение не может быть изменено, тогда как оно может быть изменено для объявления,int *ptr;

Я не уверен, что это так.

пожалуйста, помогите мне понять концепцию двух деклараций.

5 ответов


для компилятора, нет никакой разницы между двумя декларациями.

для читателя-человека Первый может означать, что тип" int* " применяется ко всем объявлениям в одном и том же заявлении. Однако * привязывается только к следующему идентификатору.

например, оба следующих оператора объявляют только один указатель.

int* ptr, foo, bar;
int *ptr, foo, bar;

этот оператор объявляет несколько указателей, что предотвращает использование интервала " int*".

int *ptr1, *ptr2, *ptr3;

пробелы в C в основном незначительны. Есть случайные случаи, когда пространства важны, но их немного и далеко друг от друга. Два примера вы выложили эквивалентны.


Как говорили другие. Нет никакой разницы. Если вы хотите понять более сложное объявление типа C, вы можете найти эту ссылку полезной. чтение объявлений C.


Это называется перегрузкой оператора пробелов, см. здесь:http://www2.research.att.com / ~bs / whitespace98.pdf


int *p;

*p 


не имеет значения для компилятора,(int*) is a type named pointer.