无法通过指针分配数组元素的值
Trouble assigning value of array element via pointers
我在尝试实施某个 "program flow" 时遇到了问题。
下面的 MWE 中的输出应该说 "Sum: 10" 但它说 "Sum: 0" 因为函数 set_array_element
没有设置数组元素。为什么不呢?
#include <stdio.h>
#include <stdlib.h>
typedef struct example example;
struct example {
int nrOf;
double a[];
};
void initialize_example_array(example *e);
void set_array_element(double *el);
example new_example(int nrOf)
{
example *e = malloc(sizeof(example) + nrOf*sizeof(double));
e->nrOf = nrOf;
initialize_example_array(e);
return *e;
}
void initialize_example_array(example *e)
{
printf("%d\n", e->nrOf);
for(int i=0; i<e->nrOf; i++)
{
set_array_element(&e->a[i]);
}
}
void set_array_element(double *el)
{
*el = 1;
}
int main(int argc, const char * argv[]) {
example e = new_example(10);
printf("%d\n", e.nrOf);
int i, s=0;
for(i=0; i<e.nrOf; i++)
{
printf("%f\n", e.a[i]);
s+= e.a[i];
}
printf("Sum: %d\n", s);
return 0;
}
灵活的数组成员,这是struct example的成员a,不是指针。它的地址是使用结构的地址计算的。
无法使用简单的赋值运算符对具有灵活数组成员的结构进行赋值,就像在您的示例中所做的那样:
example e = new_example(10);
其中函数 returns:
return *e;
你必须return指针:
example* new_example(int nrOf)
{
example *e = malloc(sizeof(example) + nrOf*sizeof(double));
e->nrOf = nrOf;
initialize_example_array(e);
return e;
}
example* e = new_example(10);
printf("%d\n", e->nrOf);
...
我在尝试实施某个 "program flow" 时遇到了问题。
下面的 MWE 中的输出应该说 "Sum: 10" 但它说 "Sum: 0" 因为函数 set_array_element
没有设置数组元素。为什么不呢?
#include <stdio.h>
#include <stdlib.h>
typedef struct example example;
struct example {
int nrOf;
double a[];
};
void initialize_example_array(example *e);
void set_array_element(double *el);
example new_example(int nrOf)
{
example *e = malloc(sizeof(example) + nrOf*sizeof(double));
e->nrOf = nrOf;
initialize_example_array(e);
return *e;
}
void initialize_example_array(example *e)
{
printf("%d\n", e->nrOf);
for(int i=0; i<e->nrOf; i++)
{
set_array_element(&e->a[i]);
}
}
void set_array_element(double *el)
{
*el = 1;
}
int main(int argc, const char * argv[]) {
example e = new_example(10);
printf("%d\n", e.nrOf);
int i, s=0;
for(i=0; i<e.nrOf; i++)
{
printf("%f\n", e.a[i]);
s+= e.a[i];
}
printf("Sum: %d\n", s);
return 0;
}
灵活的数组成员,这是struct example的成员a,不是指针。它的地址是使用结构的地址计算的。
无法使用简单的赋值运算符对具有灵活数组成员的结构进行赋值,就像在您的示例中所做的那样:
example e = new_example(10);
其中函数 returns:
return *e;
你必须return指针:
example* new_example(int nrOf)
{
example *e = malloc(sizeof(example) + nrOf*sizeof(double));
e->nrOf = nrOf;
initialize_example_array(e);
return e;
}
example* e = new_example(10);
printf("%d\n", e->nrOf);
...