- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个指向结构的指针数组,我正在尝试找到一种方法,用指向结构的新指针填充数组中的第一个 NULL 指针。即我想在数组的末尾添加一个新元素。我尝试了这样的 for 循环:
struct **structs;
int i;
for(i = 0; i < no_of_pointers; i++) {
if (structs[i] == NULL) {
structs[i] = &struct;
}
}
理论上,这将遍历数组,当它找到空指针时,它将对其进行初始化。我现在意识到它会初始化所有空指针,而不仅仅是第一个,但当我运行它时它甚至不这样做。我尝试过使用条件 while(structs[i] != NULL) 进行 while 循环,并且这种情况会永远持续下去,让我认为问题出在我如何使用 NULL 上。将新元素添加到此类数组的正确方法是什么?是否有一些我不知道的函数,例如append(structs, struct)?谢谢!
最佳答案
C 中数组的长度是固定的,定义数组后就不能更改它,这意味着不能在数组末尾添加元素。但是,除非您定义了常量数组,否则您可以将新值分配给数组的元素。根据您的问题描述,我相信这就是您想要的。
另请注意,正如其他人已经在评论中指出的那样,struct
是C的关键字,因此
您不能将其用作类型名称(如 struct **structs
中所做的那样)
您也不能将其用作变量名称(就像您在 structs[i] = &struct;
中所做的那样)
这是一种方法:
正确定义数组
struct struct_foo **structp;
structp = malloc (no_of_elements * sizeof(*structp));
if (structp == NULL) {
/* error handle */
}
注意,这里的元素是 structp
未初始化,您需要正确初始化它们。这就是我们在第 2 步中要做的事情。
使用structp
做一些事情,也许将其所有元素初始化为 NULL
或一些不-NULL
值(value)
找到第一个-NULL
structp
中的元素,并为其分配一个新值
struct struct_foo foo;
for (i = 0; i < no_of_elements; i++) {
if (structp[i] == NULL) {
structp[i] = &foo;
break;
}
}
请注意这个 foo
Also 尚未初始化,您可能需要先初始化它,或者稍后再初始化它。
关于c - 如何在c中追加到指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23236005/
我是一名优秀的程序员,十分优秀!