Я довольно новичок в C, и я не знаю разницы между следующими двумя объявлениями переменных:
int* ptr; int *ptr;
Я думаю, что в декларации int* ptr;
, значение ptr
не может быть изменено, тогда как его можно изменить для объявления, int *ptr;
Я не уверен, что все.
Пожалуйста, помогите мне понять концепцию двух деклараций.
Компилятору нет разницы между этими двумя объявлениями.
Для человека-читателя первое может означать, что тип «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
.