【发布时间】:2010-11-23 22:28:45
【问题描述】:
我有一个如下结构,它带有一个指向名为“length”的函数的指针,该函数将返回 chars 成员的长度。
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->chars) 也是如此。有人对这个问题有任何见解吗?
我特别希望能够让 initializeString() 函数返回指向 PString 的指针,并让 length 函数使用指向 PString 的指针作为输入。这只是在 C 中实现一个基本的面向对象系统的一个实验,但我没有太多正面处理指针的经验。感谢您能给我的任何帮助。
【问题讨论】:
-
虽然你说你特别想返回一个指针。在这种情况下,返回结构本身要好得多。复制结构很便宜,并且不需要重的堆分配。字符串对象是基于值的:它们没有身份(地址),但它们的相等性基于它们的内容。不知何故,你也可以在你的 OOP 系统中拥有这种与众不同的感觉。