这是我的函数:
void eeprom_read_page(unsigned int address, unsigned char lengh, unsigned char *data[40])
{
//unsigned char data[lengh] , i;
unsigned char i;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS_W);
i2c_write(address>>8); //high byte address
i2c_write(address*0xff); //low byte address
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS_R);
for(i=0 ; i<(lengh-1) ; i++)
{
*data[i+4]=i2c_read(1);
}
*data[lengh+3]=i2c_read(0);
i2c_stop();
}
这就是我在代码中使用它的方式:
eeprom_read_page( ( (rx_buffer1[1]*256)+rx_buffer1[2] ) , rx_buffer1[3] , &tx_buffer1 );
这是我定义的数组:
#define RX_BUFFER_SIZE1 40
char rx_buffer1[RX_BUFFER_SIZE1],tx_buffer1[RX_BUFFER_SIZE1];
但是tx_buffer1
没有得到我在数据中给出的值[]。我想更改tx_buffer1
但不使用返回。有什么帮助吗?
数组按以下方式声明
#define RX_BUFFER_SIZE1 40
char rx_buffer1[RX_BUFFER_SIZE1],tx_buffer1[RX_BUFFER_SIZE1];
在表达式中使用
&tx_buffer1
使表达式类型char ( * )[RX_BUFFER_SIZE1]
。
同时对应功能参数
unsigned char *data[40]
具有unsigned char **
的类型,因为编译器将具有数组类型的参数隐式调整为指向数组元素类型的对象的指针。
此外,函数参数使用说明符无符号字符,而数组使用说明符 char 声明。
因此,函数调用无效。指针类型之间没有隐式转换。
通过引用将数组传递给函数没有任何意义,因为在任何情况下数组都是不可修改的左值。
如果你想通过引用传递数组以了解它在函数中的大小,那么函数参数应该像
char ( *data )[40]