佚名通过本文主要向大家介绍了指针赋值,c语言指针赋值,给指针赋值,结构体指针赋值,指针赋值给指针等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 指针赋值问题
描述:
安装以上的思路,对m_stFactoryColshdSetting.csc[cI][cJ],编译有如下错误:
error: incompatible types in assignment of 'U8* {aka unsigned char*}' to 'unsigned char [510]'
如果安装以下的思路处理,则没有编译错误,请问是什么原因?
解决方案1:
描述:
#define U8 unsigned char
typedef struct
{
unsigned char csc[3][8][510];
}ST_FACTORY_COLSHD_SETTING;
ST_FACTORY_COLSHD_SETTING m_stFactoryColshdSetting;
U8 * SQL_GetBlob(sqlite3_stmt * stmt, const char * Title, U16 u16Size)
m_stFactoryColshdSetting.csc[cI][cJ] = SQL_GetBlob(pSqlstmt, "DV_PANEL_NUMS_COLSHD_NUM", 510);
安装以上的思路,对m_stFactoryColshdSetting.csc[cI][cJ],编译有如下错误:
error: incompatible types in assignment of 'U8* {aka unsigned char*}' to 'unsigned char [510]'
如果安装以下的思路处理,则没有编译错误,请问是什么原因?
#define U8 unsigned char
typedef struct
{
unsigned char csc[3][8][510];
}ST_FACTORY_COLSHD_SETTING;
ST_FACTORY_COLSHD_SETTING m_stFactoryColshdSetting;
U8 * SQL_GetBlob(sqlite3_stmt * stmt, const char * Title, U16 u16Size)
U8 * pValBuff = NULL;
pValBuff = SQL_GetBlob(pSqlstmt, "DV_PANEL_NUMS_COLSHD_NUM", 510);
memcpy((void *)m_stFactoryColshdSetting.csc[cI][cJ],(void *)pValBuff,510);
解决方案1:
没办法返回一个数组吧,数组赋值只能一个一个的赋值,或者没存拷贝
解决方案2: 我是这样理解的:
m_stFactoryColshdSetting.csc[cI][cJ] 是元素地址,它是个固定编译出一个地址,不能变化,变化的只是元素成员;
SQL_GetBlob(pSqlstmt, "DV_PANEL_NUMS_COLSHD_NUM", 510);返回个指针,指向在函数内分配的一个地址空间,这可能是动态生成的;
修改m_stFactoryColshdSetting.csc[cI][cJ] 这样一个地址本身就是不合理的,你试试给它赋值,应该都不行。
你的主要目标应该元素内容的修改,所以memcpy去copy两个地址的内容是合理的