Kai*_*Kai 5 c arrays struct word-wrap
我将很快开始使用C作为操作系统课程,我正在阅读有关使用C的最佳实践,以便稍后减轻头痛.
这一直是我关于阵列的第一个问题,因为它们很容易搞砸.
将数组及其关联变量包含在结构中的长度是一种常见的做法吗?
我从来没有在书中看过它,通常他们总是把两者分开或使用像sizeof(array []/array [1])这样的交易.
但是将这两个包装成一个结构,你可以通过值和引用传递结构,除非使用指针,否则你不能真正使用数组,在这种情况下你必须再次跟踪数组的长度.
我开始使用C所以上面可能是错误的,我还是学生.
干杯,凯.
当然,你可以这样做。不确定我是否将其称为最佳实践,但是让 C 相当基本的数组更易于管理无疑是一个好主意。如果您需要动态数组,则几乎需要将簿记所需的各个字段分组在一起。
有时在这种情况下您有两种大小:一种是当前大小,另一种是已分配大小。这是一种权衡,您可以用更少的分配来换取一定的速度,但会付出一些内存开销。
很多时候,数组仅在本地使用,并且具有静态大小,这就是为什么sizeof运算符可以如此方便地确定元素的数量。顺便说一句,您的语法与此略有不同,通常如下所示:
int array[4711];
int i;
for(i = 0; i < sizeof array / sizeof *array; i++)
{
/* Do stuff with each element. */
}
Run Code Online (Sandbox Code Playgroud)
请记住,这sizeof不是一个函数,并不总是需要括号。
编辑:一个真实世界的包装示例与您所描述的完全一样,是glib提供的GArray类型。声明的用户可见部分正是您所描述的:
typedef struct {
gchar *data;
guint len;
} GArray;
Run Code Online (Sandbox Code Playgroud)
程序应尽可能使用提供的 API 来访问数组,而不是直接访问这些字段。
是的,这是C中的一个很好的实践.将相关值包装到包含结构中是完全合乎逻辑的.
我会走得更远.您也可以直接修改这些值.而是在结构中编写作为一对对象的函数来更改长度和更改数据.这样,您可以添加不变检查,并使其非常容易测试.