奇怪的浮动?指向结构中浮点的指针

时间:2013-05-29 10:24:22

标签: c struct floating-point

第一次在这里发帖

我目前正在为嵌入式设备移植一些代码。基本上使用来自过时的现有专有编译器的新编译器(AVR-GCC)来处理所有内容

我在结构中遇到了这个奇怪的样子(对我来说!)变量。我无法弄清楚圆括号是什么。它位于用于原始值的结构中:

float   (*tc)( float value );

我的IDE突出显示'value'作为编译器关键字,就像'float'所以我不知道这是否是特定于AVR-GCC的?

然后在具有名为“reading”的float参数的函数中使用它,并尝试返回以下内容:

    return (raw[rCN3].tc)( reading );

上面的行实际上导致程序尝试访问越界内存。

我之前没有看过这样的代码所以想知道是否有人可以帮我解读它?它适用于旧的编译器,但导致AVR-GCC出现问题

提前致谢。亚历克斯

4 个答案:

答案 0 :(得分:1)

这是一个函数指针。它指向一个返回浮点值且具有float参数的函数。

答案 1 :(得分:1)

两件事:

1)float (*tc)( float value )是函数的function pointer,以浮点作为参数,返回浮点数

2)'value'是C#中的关键字,也可能是其他语言;因此它突出了。检查编辑器语言设置。

答案 2 :(得分:0)

这是一个函数指针变量。

tc是一个指向函数的指针,它接受一个float作为参数并返回一个`float。

它访问超出内存的原因是可能是,因为rCN3超出了数组raw的范围。

答案 3 :(得分:0)

这是一个函数指针。

这意味着tc保存接受单个float参数的函数的地址,并返回float值。

例如,您可以将其设置为标准库的sinf函数,如下所示:

somestruct.tc = sinf;

somestruct.tc(3.14159265f / 2);  /* This will return roughly 1.0f. */

此外,无用的cdecl说:

  

声明tc为指向函数(float)返回float

的指针
相关问题