У меня есть структура следующим образом, с указателем на функцию с названием «длина», которая вернет длину члена символов.Функциональный указатель как член C struct
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
У меня есть функция, чтобы вернуть длину символов из указателя на PString:
int length(PString * self) {
return strlen(self->chars);
}
У меня есть функция initializeString(), которая возвращает указатель на PString:
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
Понятно, что я делаю что-то очень неправильно с моими указателями здесь, потому что строка str->length = &length
вызывает в моем отладчике сигнал EXC_BAD_ACCESS, как и `return strlen (self-> char с). У кого-нибудь есть понимание этой проблемы?
Я хочу, чтобы функция initializeString() возвращала указатель на PString и функцию длины, чтобы использовать указатель на PString в качестве входных данных. Это всего лишь эксперимент по реализации элементарной объектно-ориентированной системы на C, но у меня нет большого опыта работы с указателями. Спасибо за любую помощь, которую вы можете мне дать.
Хотя вы говорите, что конкретно хотите вернуть указатель. В этом случае возвращение самой структуры намного лучше. Скорее всего, копировать структуру, и нет необходимости в распределении кучи тяжелого веса. Объекты String основаны на значении: у них нет идентификатора (адреса), но их равенство основано на их содержании. У вас тоже может быть такое чувство в вашей системе ООП. –