数组名称在 C 中衰减为指针 - 编译错误



在下面的代码中,我使用函数mraa_spi_write_buf()收到以下警告。

警告:赋值从指针生成整数而不带强制转换 [-Wint-conversion] read_data[0] = mraa_spi_write_buf(spi, cmd, 2);

我以为数组名称衰减到 c 中的指针?

这是函数的函数声明

uint8_t * mraa_spi_write_buf (mraa_spi_context dev, uint8_t *data, int length).

#include "mraa.h"
#include <stdio.h>
#include <unistd.h>
int main()
{
uint8_t cmd[2] = {0xAA, 0xFF};
uint8_t read_data[2];
read_data[0] = mraa_spi_write_buf(spi, cmd, 2);
} 

问题不在于参数,而在于返回值,函数返回一个指针,然后将其分配给整数变量read_data[0].

我以为数组名称衰减到 c 中的指针?

您可以使用数组名称作为指向数组第一个元素的指针,但除了这种情况之外,这不是真的。

你的函数返回 int*,所以你需要取消引用来获取值:

uint8_t* recv; 
recv = mraa_spi_write_buf(spi, cmd, 2)
if( recv != NULL)
{
read_data[0] = *(mraa_spi_write_buf(spi, cmd, 2));
}
else
{
//Handle error
}
free(recv);

编辑:感谢您的更正@JeremyP。

最新更新