有人可以逐行解释这一点(可能是逐个字符,哈哈)?
typedef int (*funcptr)(); /* generic function pointer */
typedef funcptr (*ptrfuncptr)(); /* ptr to fcn returning g.f.p. */
funcptr start(), stop();
funcptr state1(), state2(), state3();
void statemachine()
{
ptrfuncptr state = start;
while(state != stop)
state = (ptrfuncptr)(*state)();
}
funcptr start()
{
return (funcptr)state1;
}
Run Code Online (Sandbox Code Playgroud)
例如,我想知道为什么在第1行的末尾有()."只是你如何声明指向函数的指针"这样的答案会令人满意,但是当你声明一个这种类型的变量时,为什么只使用"funcptr"而没有()?
第4行和第5行.为什么你在这里有?那些不是函数,它们是函数的指针,对吧?
第9行.为什么"状态"没有()?仍然是指向函数的指针,就像第5行和第6行的指针一样.
第9行.没有()的"开始"是什么?
第12行.什么?!(我知道什么是类型转换.至少我认为我做...)
第17行.为什么"state1"需要进行类型转换?这是它已经被铸造的类型.或者是因为它缺少()?
这对我理解这些概念真的很有帮助.
PS.这是一个微控制器,我将用于我正在设计的电子虚拟负载.认为这是一个了解更多关于C的好机会.代码来自http://c-faq.com/decl/recurfuncp.html
假设我有一个unsigned char(或byte)数组.我想从内存中取出array [1]和array [2]并将其转换为short int(2个字节).类似于联合的工作方式,但不是从第一个字节开始.
例:
#include <stdio.h>
void main()
{
unsigned char a[28];
unsigned short t;
a[0]=12;
a[1]=10;
a[2]=55;
t=(short) *(a+1);
printf("%i", t);
}
Run Code Online (Sandbox Code Playgroud)
我想要的是十进制值14090.或370Ah.
谢谢.
编辑:我忘了说,但大多数人都从我的例子中了解到,我正在研究一台小端机器.一个8位Atmel微控制器.
在下面的示例中,“a + b”将溢出两个变量的大小。这个临时结果会存储在 16 位空间还是需要的最大空间?
这种情况是否跨编译器标准化?系统架构重要吗?我在 8 位微控制器上。Short 类型为 16 位。
res 是否等于 50000、17232 或未定义?
unsigned short a = 50000;
unsigned short b = 50000;
unsigned short res = 0;
void main()
{
res = (a + b) / 2;
}
Run Code Online (Sandbox Code Playgroud)