Intereting Posts
Чтение текстового файла в 2d-массив objective c – импортировать файл .m и .h – что он делает Существует ли ограничение на количество значений, которое может быть напечатано одним вызовом printf? Как hash-векторы в ведрах в локации Чувствительная хеширование (с использованием jaccard distance)? Команда OpenSSL в c для получения модуля открытого ключа в RSA GCC: компиляция узла OpenCL в Windows Как получить наименьшее число после удаления k цифр из входного номера Акцентированные / umlauted символы в C? В Posix как используется тип dev_t? Когда двумерный массив и multidimensional array в качестве функциональных параметров на языке C Объявление переменной внутри цикла Предоставляет ли компилятор возможность добавлять функции в стандартные заголовки? Как динамически выделять непрерывный блок памяти для 2D-массива В чем причина ошибки при возврате структуры в этой программе? Работа с большими массивами без ошибок во время выполнения

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

Я довольно новичок в 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 .