- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一种知道其大小的字符串,称为 pstring(Pascal 字符串的眨眼)。大小只是在内存中作为字节数组的前缀,而不是结构体{size, p_bytes}
。 (原因是从概念上和实践上避免双重引用;以及结构体和字节数组的双重堆分配。)我可以使用仅分配 sizeof(size_t)
的工具 func 来做到这一点> bytes more,返回一个指向字节数组实际地址的指针,并提供一个宏来读取前面几个字节的大小。
相反,我想通过使用灵活数组成员的“灵活结构”在稍高的级别上做到这一点:
typedef struct {
size_t size;
uint hash;
char bytes[];
} PString;
// constructor:
PString * pstring (char * bytes, size_t size) {...}
(这些 pstring 也有一个哈希,因为它们被保存在池中。)但是现在,我有一个形而上学的问题来选择对 pstring 的正确访问。问题在于 pstring(就像普通字符串一样)只能通过指针进行操作。但是我应该如何提供接口(interface),无论是否指向?
const char * string;
,因此似乎很自然地“指向”类型 pstring,并且大家都知道它是指针类型。* 显式声明变量
(有时会在他们的名字前加上“p_”前缀)。那么,我应该在这里做什么,以便 pstrings 的用户清楚语义并轻松实践?
无论如何,var 都是指向的并且字段访问通过 ->
进行。到目前为止,如您所见,我选择了第二个选项:人们将 pstring 声明为 PString * ps;
。但我准备根据以下论点进行更改:
你觉得怎么样?
最佳答案
我认为,您最好采用第二种方法。
对于隐式指针“C”字符串,它们的行为类似于字节数组,您可以直接从字节 1 开始访问字符串内容。但是,在这种情况下,它是构造的(用户定义的)类型,并且为了做出这种区分,我希望它是一个显式指针(即第二种方法)。
顺便说一句,您会提供对这些字符串执行比较、字符搜索等操作的函数吗?我建议您可以遵循 C++ String 类型的模型并提供一个 c_str 函数,该函数进一步提供指向“字节”的指针。
关于c - 指或不指,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861270/
我是一名优秀的程序员,十分优秀!