函数指针在c - 理解中

时间:2016-05-06 10:46:34

标签: c function pointers bit-manipulation

我在阅读下面的代码时,第一段调用read_temperature,它读取温度传感器。

我正在努力理解它。

  1. read_temperature()是指向函数的指针吗?这有什么好处?

  2. read_temperature获取长度的地址?

  3. 为什么有必要使用memset()将tempbuff []初始化为全零。

  4. temp_reading&0xff做了什么?

  5. 为什么最后需要*templength = 5;

  6. static int length; 静态无符号地址

    address = (unsigned int)read_temperature(& length);  
    PRINTF("Temperature [%x] and its length is [%d] \r\n",address,length);
    

    第二部分:

    uint8_t tempbuff[8];
    
    uint8_t * read_temperature(int *templength)
    {
    
    }
    

2 个答案:

答案 0 :(得分:1)

  1. 不,read_temperature返回指针的普通函数。

  2. templength作为指针传递,以便read_temperature可以更改调用者中的目标,就像它在将其设置为5时在底部所做的那样。

  3. 由于前5个元素是手动设置的,因此memset调用实际上只需要最后3个元素。它还可以更容易地调整所设置的部分而不必担心其他元素。

  4. temp_reading&0xff正在屏蔽temp_reading的低8位,强制其余部分为0.它是按位AND操作。

  5. 如前所述,它告诉来电者tempbuff的定义有多少。调用者传递int变量的地址,返回时该变量包含5.

答案 1 :(得分:0)

不,read_temperature是一个返回指向uint8_t的指针的函数。

对于参数,在C中传递参数是通过值完成的,这意味着将值复制到参数变量中。为了模拟通过引用传递,使用了一个指向变量的指针,这样函数可以取消引用指针来访问指针所指向的内容(调用函数中的变量)。因此,当函数执行*templength = 5时,它会将调用函数中的变量length设置为值5

缓冲区的初始化可能是,因此它不是先前调用的值或对使用相同全局缓冲区的其他函数的调用。