Что такое функция звездочки перед именем функции?
Я был смущен тем, что я вижу на большинстве программ на C, которые имеют незнакомые объявления функций для меня.
void *func_name(void *param){
...
}
что значит *
подразумевает функции? Мое понимание о (*
) в типе переменной является то, что он создает указатель на другую переменную, таким образом, он может быть в состоянии отслеживать, какой адрес, по которому последняя переменная хранится в памяти. Но в этом случае функции, я не знаю, что это *
звездочка подразумевает.
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, чтобы иметь доступ к данным в том месте памяти, на которое он ссылается.