小编Dra*_*uri的帖子

涉及函数指针和状态机的代码说明

有人可以逐行解释这一点(可能是逐个字符,哈哈)?

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

c function-pointers state-machine

3
推荐指数
1
解决办法
691
查看次数

从char数组中提取第2和第3个值并将其转换为short(2个字节).在C.

假设我有一个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微控制器.

c arrays pointers casting

1
推荐指数
1
解决办法
129
查看次数

临时操作会导致 8 位嵌入式系统溢出吗?

在下面的示例中,“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)

c embedded 8-bit

1
推荐指数
1
解决办法
62
查看次数