在函数调用中使用它时,向struct中的指针添加值

时间:2016-04-28 07:43:12

标签: c function pointers struct

以前我有一个函数f(double *a),它有一个数组可以处理。为了获得正确的位置,它应该在数组上工作,它被称为f(a+offset)offset是一个整数。现在我重新编写了代码,并定义了一个自定义结构:

typedef struct{
double *a;
} struName;

,功能更改为f(struName *a)。现在我想知道如何仍然可以获得函数的偏移量,而不必创建新的临时struct或者必须将函数从f(struName *a)更改为f(struName *a, int offset)。这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

在不更改结构内容或调用未定义行为的情况下,这是不可能的。

如果您有权访问ISO C99,则可以更改签名以接受struct的值,并传入复合文字:

f((struct struName){ .a = myStruct.a + offset });

否则您提出的解决方案与不同的参数应该可以正常工作:

f(myStruct, offset);

答案 1 :(得分:2)

最佳解决方案是更改函数以获取偏移参数。

如果这不是一个选项,那么第二个最佳解决方案是将结构定义更改为包含偏移成员(如果这在设计上有意义的话)。

如果那也不是一个选项,那么第三个最佳解决方案就像Leandros的答案一样:创建一个临时结构并在将指针传递给临时结构之前更改指针成员。也就是说,将结构视为 immutable - 如果可能的话,使指针成员const。这使程序设计保持干净,但您必须制作结构的额外副本。