Какова функция звездочки перед именем функции? - PullRequest
59 голосов
/ 18 января 2012

Меня смутило то, что я вижу в большинстве программ на Си, где для меня есть незнакомое объявление функции.

void *func_name(void *param){
    ...
}

Что означает * для функции?Мое понимание (*) в типе переменной заключается в том, что он создает указатель на другую переменную, поэтому он может отслеживать, по какому адресу последняя переменная хранится в памяти.Но в этом случае функции, я не знаю, что означает эта * звездочка.

Ответы [ 4 ]

69 голосов
/ 18 января 2012

Звездочка относится к типу возвращаемого значения, а не к имени функции, т.е.

void* func_name(void *param) { . . . . . }

Это означает, что функция возвращает пустой указатель .

17 голосов
/ 18 января 2012

* относится к типу возврата функции, который равен void *.

Когда вы объявляете переменную-указатель, то же самое можно поставить * рядом с именем переменной илитип переменной:

int *a;
int* a;

Я лично считаю первый вариант более понятным, потому что если вы хотите определить несколько указателей с использованием разделителя ,, вам придется каждый раз повторять *:

int *a, *b;

Использование синтаксиса «близко к типу» в этом случае может вводить в заблуждение, потому что если вы напишите:

int* a, b;

Вы объявляете указатель на int (a) иint (b).

Таким образом, вы найдете этот синтаксис и в функциях, возвращаемых типами!

10 голосов
/ 18 января 2012

* принадлежит типу возврата.Эта функция возвращает void *, указатель на некоторую ячейку памяти неопределенного типа.

Указатель сам по себе является типом переменной, в качестве значения которого указан адрес некоторой ячейки памяти.Различные типы указателей в C представляют различные типы, которые, как вы ожидаете, будут находиться в той области памяти, на которую ссылается переменная указателя.Таким образом, int *, как ожидается, будет относиться к местоположению, которое можно интерпретировать как int.Но void * - это тип указателя, который указывает на область памяти неопределенного типа.Вам нужно будет привести такой пустой указатель, чтобы иметь возможность доступа к данным в той области памяти, к которой они относятся.

5 голосов
/ 18 января 2012

Это означает, что функция возвращает void*.

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