使用指针引用调用函数而不分配地址

时间:2018-03-14 22:20:59

标签: c function pointers

我正在使用一个成熟的PLC(可编程逻辑控制器)程序来实现用C语言编写的库。

我正在尝试理解指针在此设置中的工作原理,因为它对我没有意义。

lib.h

typedef struct {
/* Input Parameter */
short int   X;                      /*Setpoint*/
short int   Y;                      /*Actual*/
/* Output Parameter */
short int   Z;                      /*Setpoint-Actual*/
}difference_Typ;

lib.c

int tdelta(difference_Typ *d)
{
     d->Z = d->X-d->Y;

     return 0;
}

的main.c

_GLOBAL     difference_Typ      Volts;

void main()
{
    Volts.X=5;
    Volts.Y=1;
    tdelta(Volts);
}

这非常简化,但函数由变量名称(不是变量的地址)调用,并且变量未定义为引用。然后,在库中,它使用指针访问结构。

这有效,但它应该是吗?

1 个答案:

答案 0 :(得分:0)

不,它不应该工作。

它可能适用于某些编译器 - 如果他们决定通过实际传递指针来实现传递结构。但肯定不能保证你的编译器以这种方式工作。

此外,如果你有一个正确的函数原型包含在两个文件中,那么一个或另一个文件不会编译(因为那时编译器会知道参数应该是什么)。