c 中的函数指针 - 理解
function pointer in c - understanding
我阅读下面的代码,第一段调用 read_temperature
,它读取温度传感器。
我正在努力理解它。
read_temperature()
是一个指向函数的指针吗?这样做有什么好处?
read_temperature
取length的地址?
为什么需要使用 memset()
将 tempbuff[] 初始化为全零。
temp_reading&0xff
是做什么的?
为什么要在最后做*templength = 5;
?
静态整数长度;
静态无符号地址
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)
{
}
不,read_temperature
是一个 returns 指向 uint8_t
.
的函数
至于参数,在 C 中传递参数是通过值完成的,这意味着值被复制到参数变量中。为了模拟通过引用传递,使用了指向变量的指针,这样函数就可以取消引用指针以访问指针指向的内容(调用函数中的变量)。因此,当函数执行 *templength = 5
时,它会将调用函数中的变量 length
设置为值 5
.
缓冲区的初始化是可能所以它不是以前调用或调用使用相同全局缓冲区的其他函数的值。
不是,read_temperature
是一个普通的函数,returns一个指针。
templength
作为指针传递,以便 read_temperature
可以更改调用方中的目标,就像在将其设置为 5 时在底部所做的那样。
由于前 5 个元素是手动设置的,因此 memset
实际上只需要对最后 3 个元素进行调用。它还可以更轻松地调整正在设置的部分,而无需担心其他元素。
temp_reading&0xff
屏蔽了temp_reading
的低8位,强制其其余部分为0。这是一个按位AND运算。
如前所述,它告诉调用者定义了 tempbuff
的多少。调用者传递了一个 int
变量的地址,并且在 return 该变量包含 5.
我阅读下面的代码,第一段调用 read_temperature
,它读取温度传感器。
我正在努力理解它。
read_temperature()
是一个指向函数的指针吗?这样做有什么好处?read_temperature
取length的地址?为什么需要使用
memset()
将 tempbuff[] 初始化为全零。temp_reading&0xff
是做什么的?为什么要在最后做
*templength = 5;
?
静态整数长度; 静态无符号地址
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)
{
}
不,read_temperature
是一个 returns 指向 uint8_t
.
至于参数,在 C 中传递参数是通过值完成的,这意味着值被复制到参数变量中。为了模拟通过引用传递,使用了指向变量的指针,这样函数就可以取消引用指针以访问指针指向的内容(调用函数中的变量)。因此,当函数执行 *templength = 5
时,它会将调用函数中的变量 length
设置为值 5
.
缓冲区的初始化是可能所以它不是以前调用或调用使用相同全局缓冲区的其他函数的值。
不是,
read_temperature
是一个普通的函数,returns一个指针。templength
作为指针传递,以便read_temperature
可以更改调用方中的目标,就像在将其设置为 5 时在底部所做的那样。由于前 5 个元素是手动设置的,因此
memset
实际上只需要对最后 3 个元素进行调用。它还可以更轻松地调整正在设置的部分,而无需担心其他元素。temp_reading&0xff
屏蔽了temp_reading
的低8位,强制其其余部分为0。这是一个按位AND运算。如前所述,它告诉调用者定义了
tempbuff
的多少。调用者传递了一个int
变量的地址,并且在 return 该变量包含 5.