在 c 中使用带有浮点数的偏移量



代码对于 int 工作正常,但是当我想使用浮点数时,除非我将结构转换为字符指针,否则它会失败。下面是它的样子:

struct test
{
    float a;
    float b;
};
void stuff(int offset, test* location);
int main()
{
    test *t;
    t = (test*)malloc(sizeof(test));
    char choice = '';
    //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 %fn", 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 指针的偏移量将起作用。

我尝试在网上查找,但我找不到太多关于这个问题的信息。

这是因为指针具有"单位",即它们指向的对象的大小。

假设您有一个指向地址 1000 的指针p

如果你有

int* p = 1000;
p += 10;

p将指向 32 位计算机上的1040,因为int的大小为 4 字节。

但如果你有

char* p = 1000;
p += 10;

p将指向1010.

这就是为什么

*(float *)((char *)location + offset) = imput;

有效,但是

*(float *)(location + offset) = imput   Will Not Work

不。

相关内容

  • 没有找到相关文章

最新更新