我在的动态数组中分配了一些数据struct
。我可以在struct *
不知道大小的情况下进行迭代吗?
这行得通吗?
int main() {
struct *foo = NULL;
//struct filling
iterate_foo(foo);
}
void iterate_foo(struct *foo) {
int i=0;
while (foo[i] != NULL) { // Would this work?
//something
}
}
唯一可行的方法是,如果数组中有一个指示结束的哨兵值。C中的字符串以这种方式工作。
例如,如果您调用strcpy(a, b)
,则字符fromb
将被复制到,a
直到包括零值。如果b
数组中没有零终止符,或者a
其大小不足以容纳所有字符,则函数调用将导致未定义的行为。
如果您不想使用前哨值,则可以选择将大小作为单独的参数传递。另一种方法是将内容包装在容器结构中,如下所示:
struct container {
struct mystruct *data;
size_t size;
}
再者,struct *foo = NULL;
是错误的。它必须像struct mystruct *foo = NULL;
但是,如果您有以下代码:
void foo(T *ptr) {
// Do something
}
int main(void) {
T *a = malloc(N * sizeof *a);
T b[N];
foo(a);
foo(b);
}
然后,完全不可能foo
以N
便携式方式解决问题。在某些情况下,请相信在malloc
存储数据之前执行存储大小。但是不要尝试利用它。这只会导致严重的头痛。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句