Что такое функция звездочки перед именем функции?


Я был смущен тем, что я вижу на большинстве программ на C, которые имеют незнакомые объявления функций для меня.

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

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

4 54

4 ответа:

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

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

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

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

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

int *a;
int* a;

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

int *a, *b;

С помощью "близко к синтаксису типа" может быть вводит в заблуждение в этом случае, потому что если вы пишете:

int* a, b;

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

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

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

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

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