В чем разница между int* ptr и int *ptr в C?

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

int* ptr;
int *ptr;

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

Я не уверен, что это все же.

Какова концепция двух деклараций?


person anpatel    schedule 17.10.2011    source источник
comment
возможный дубликат C: есть ли разница между int* fooBar; и int *fooBar;? и Разница между int *i и int * i, Разница между int* p и int *p декларация вместе с дюжиной других.   -  person jscs    schedule 18.10.2011
comment
stackoverflow.com/questions/3770187 /   -  person Pi Delport    schedule 18.10.2011


Ответы (5)


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

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

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

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

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

int *ptr1, *ptr2, *ptr3;
person Andy Thomas    schedule 17.10.2011

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

person Ted Hopp    schedule 17.10.2011

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

person Xyand    schedule 17.10.2011

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

person Dabbler    schedule 17.10.2011
comment
Я знаю, что это было опубликовано год назад, но эта ссылка действительно потрясающая! Спасибо. - person anpatel; 01.11.2012

int *p;

*p 


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

person Mustafa Ekici    schedule 17.10.2011