Звездочка в C - Что означает дополнительный пробел? - PullRequest
3 голосов
/ 10 августа 2010

Я думаю, что *something и * something различны.

Что делает дополнительный пробел?

происходит здесь -> void * malloc( size_t number_bytes );

Ответы [ 7 ]

12 голосов
/ 10 августа 2010
int* foo == int *foo == int * foo == int  *   foo

Пробел не имеет никакого значения для компилятора.

10 голосов
/ 10 августа 2010

Когда вы используете звездочку для получения значения адреса, она называется оператор разыменования . Например:

int x = *something;

В примере в вашем вопросе звездочка имеет другое значение, потому что она является частью типа, а не частью выражения. Он используется для указания того, что тип возвращаемого значения - указатель (в вашем конкретном примере - указатель void).

Дополнительный пробел ничего не значит и игнорируется компилятором. Это только для удобства чтения.

2 голосов
/ 11 августа 2010

Оператор * в объявлении всегда связывается с декларатором; линия

void * malloc (size_t number_bytes);

анализируется как если бы было написано

void (*malloc(size_t number_bytes));

Это случай синтаксиса C, который вы можете написать T *p; или T* p; или даже

T             *                     p; 

но все они анализируются как T (*p); - пробел не имеет значения в том, как интерпретируются объявления.

1 голос
/ 10 августа 2010

C игнорирует посторонние пробелы, поэтому "* " должен иметь тот же эффект, что и "*".

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

0 голосов
/ 10 августа 2010

В вашем примере void * malloc(...) тип void *. malloc возвращает указатель на void, который является просто указателем, который должен быть приведен к определенному типу, чтобы быть полезным.

0 голосов
/ 10 августа 2010

Проверьте эту статью на Указатели

Эти две строки делают то же самое.

0 голосов
/ 10 августа 2010

То же самое, но с добавлением пробела.

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