Я думаю, что вы запрашиваете аналог this
указателя на функции-члены C ++ (эквивалентно, this
ссылка на методы экземпляра Java). Но C не имеет аналога функций-членов или методов экземпляра. В более общем смысле, он не имеет встроенных функций, специально предназначенных для ООП - поэтому C ++ был разветвлен от C, в конце концов.
Структура C может иметь член, который является указателем на функцию, но вызов этой функции через такой указатель не отличается от вызова ее напрямую или вызова через другой указатель на нее. Нет никакого различия, и, следовательно, нет способа определить, какой указатель использовался для идентификации функции, тем более, какие данные могут быть связаны с ней или храниться поблизости.
Обычная альтернатива C, по сути, состоит в том, чтобы предоставить явный указатель this
на функции, которые его хотят (хотя оно может называться любым именем, которое вам нравится), и передать его явно. Это может, кроме того, уменьшить или исключить полезность хранения указателей на него в структуре. Например:
typedef struct {
double x, y, radius;
} circle;
double computeArea(circle *c) {
return c->radius * c->radius * 3.14159;
}
void moveTo(circle *c, double new_x, double new_y) {
c->x = new_x;
c->y = new_y;
}
int main(void) {
circle a_circle = { .x = 1, .y = 1, .radius = 2 };
printf("The area is %f\n", computeArea(&a_circle));
}