我的结构如下
typedef struct runData{
byte curentCycle = 0;
sensorData sensor[8];
}
其中sensorData是以下结构
typedef struct sensorData{
float currentValue=NULL;
float lastValue;
float maxValue[2] = {-50 ,-50};
float minValue [2]= {1001,1001};
byte trend=0;
byte mode = 1;
sensorSetPoints setPoints[2];
};
和sensorSetPoints是
typedef struct sensorSetPoints{
float setPoint;
float rise;
float drop;
};
我按
创建和添加数据runData *thisRun;
thisRun->sensor[0].setPoints[0].setPoint = 26.77;
现在我想得到这个值,不是使用结构而是使用偏移指针。我得到了thisRun的地址并为它添加了一个偏移量,这个偏移来自我创建的数组,原理是这是结构中的第11个项目,前面的10个项目(6个浮点数和4个字节)给出了偏移量当我把它添加到thisRun的地址时,我认为我应该有一个指针指向thisRun-> sensor [0] .setPoints [0] .setPoint
因此,如果您同意我的意见,为什么以下不起作用
uint16_t *baseAddress = (uint16_t *)thisRun;
uint16_t offset = readOffset(10);//returns offset
baseAddress += offset;
float *f;
memcpy(f,baseAddress,4);
当我打印f时它是0.00 我错过了什么?
答案 0 :(得分:1)
在您发布的代码中的许多问题中,这是最严重的问题
float *f;
memcpy(f, baseAddress, 4);
您正在尝试写入未分配的指针。
您甚至没有初始化f
,具体取决于您想要的内容
float *f;
f = malloc(sizeof(*f));
if (f != NULL)
memcpy(f, baseAddress, sizeof(*f));
或可能是
float f;
memcpy(&f, baseAddress, sizeof(*f));
答案 1 :(得分:0)
好的,如果它帮助其他人就是我想做的事情,那么它的关键是使用reinterpret_cast
intptr_t p =(intptr_t)&thisRun; //Integer type capable of holding object pointer
p += readOffset(10); //function which determines the offset of, in this case the 10th item
float fval = *reinterpret_cast<float *>(p);//Cast the int back to a pointer