【发布时间】:2018-01-29 19:20:29
【问题描述】:
我对 C 很陌生。我创建了一个结构和一个结构数组来存储数据并将它们中的每一个传递给我的函数:
int dosomething(struct s1 *struct1, struct s2 *struct2);
struct S1 {
int a;
int b;
int c;
};
struct S2 {
double x;
double y;
double z;
};
int main()
{
int n = 200;
struct S1 s1;
struct S2 *s2 = malloc(n * sizeof(struct S2));
dosomething(&s1, &s2[0])
return 0;
}
int dosomething(struct S1 *s1, struct S2 *s2)
{
s1->a = 1;
s1->b = 2;
s1->c = 3;
s2[0].x = 1.1;
s2[1].x = 1.123233;
...
return 1;
}
随着时间的推移,这变得很烦人,所以我决定把它们放在一起。 现在我正在这样做
struct S1 {
int a;
int b;
int c;
struct S2 *s2;
};
struct S2 {
double x;
double y;
double z;
};
int main()
{
int n = 200;
struct S1 s1;
struct S2 *s2 = malloc(n * sizeof(struct S2));
s1.s2 = s2;
dosomething(&s1)
return 0;
}
int dosomething(struct S1 *s1)
{
s1->a = 1;
s1->b = 2;
s1->c = 3;
s1->s2[0].x = 1.1;
s1->s2[1].x = 1.123233;
...
// OR
struct S2 *s2 = s1->s2;
s2[0].x = 1.1;
s2[1].x = 1.123233;
...
}
现在,问题是: 我读了很多关于指向结构、数组、结构数组等的指针,但我仍然不确定我在这里所做的是否正确。 C: pointer to array of pointers to structures (allocation/deallocation issues), c pointer to array of structs, How to declare pointer to array of structs in C, Pointer to array of struct in function。 我的项目正在发展到一个规模,我只是不想通过努力让它变得更好来让它变得更糟。
我需要创建一个指向 s2.s1[x] 的指针数组吗?
我需要告诉一个指针 (struct S2 *s2 = s1->s2) s2 有多少元素吗?
是否有任何陷阱或可能出现问题?
【问题讨论】:
-
您的编译器是否显示任何警告?关于
main()的隐式声明? -
n定义在哪里? -
你需要指针持有的元素个数。
-
@BLUEPIXY 没错,它可能是另一个结构成员。
-
@dimplemind:最好 1. 在Code Review 上发布此内容,以及 2. 使用您的 实际 代码(无论如何这都是 Code Review 的要求)。使用像 S1 和 S2 这样的混淆名称几乎不可能进行代码审查和合理的建议。