код отлично работает для int, но когда я хочу использовать float, он терпит неудачу, если я не брошу структуру в качестве указателя на символ. Вот как это выглядит:Использование offsetof с поплавком в c
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 будет.
Я пробовал смотреть в Интернете, но я не мог найти много о проблеме.
Это не будет работать для Ints. Причина, по которой вам нужно наложить символ 'char *', связана с арифметикой указателя. Когда вы оставите указатель без него, он добавит 'offset * sizeof (test)' к адресу вашего указателя, который вам не нужен. – JS1
Приведенный пример не компилируется. Возможно, отсутствует «typedef» для 'test'. Учитывая это, ни один из ответов не является полезным. –