【发布时间】:2015-04-14 08:43:55
【问题描述】:
代码适用于 int,但是当我想使用 float 时它会失败,除非我将结构转换为字符指针。这是它的样子:
struct test
{
float a;
float b;
};
void stuff(int offset, test* location);
int main()
{
test *t;
t = (test*)malloc(sizeof(test));
char choice = '\0';
//Find the byte offset of 'a' within the structure
int offset;
printf("Edit a or b?");
scanf("%c", &choice);
switch (toupper(choice))
{
case 'A':
offset = offsetof(test, a);
stuff(offset, t);
break;
case 'B':
offset = offsetof(test, b);
stuff(offset, t);
break;
}
printf("%f %f\n", t->a, t->b);
return 0;
}
void stuff(int offset, test* location)
{
float imput;
printf("What would you like to put in it? ");
scanf("%f", &imput);
*(float *)((char *)location + offset) = imput;
//*(float *)(location + offset) = imput Will Not Work
}
*(float *)(location + offset)= imput
不适用于浮点数,但转换位置和作为 int 指针的偏移量。
我尝试在网上查找,但找不到太多关于此问题的信息。
【问题讨论】:
-
这也不适用于整数。您需要转换为
char *的原因是指针算法。当您不投射指针时,它会将offset * sizeof(test)添加到您的指针地址,这不是您想要的。 -
给出的示例无法编译。
test可能缺少 typedef。鉴于此,没有一个答案是有用的。