я играл и структуры пытаюсь получить их значение с помощью смещения, это мой кодНе может понять, почему я получил эти результаты, используя структуру смещения в C
#include <stdio.h>
#include <stddef.h>
typedef struct abcd{
int a,b;
double c,d;
}abcd;
int main()
{
abcd teste = {.a = 3, .b = 5, .c = 7, .d = 9};
printf("value of a: %d //value of b: %d\n",*((char*) &teste), *((char*) &teste + offsetof(abcd, b)));
return 0;
}
выход: value of a: 3 //value of b: 5
все работает нормально, но когда я изменить Printf к
printf("value of a: %d value of b: %d\n", *(&teste), *((char*) &teste + offsetof(abcd, b)));
//No casting to (char*) in value of a
Я получаю результат: value of a: 5 value of b: 1360854088
Почему это происходит?
Ваших второй 'printf' вы на самом деле даете полную структуру (' * (& TESTE) ') для'% формат d' спецификатора , Это приведет к смещению позиций стека последующих значений для последующих спецификаторов в строке формата. – lurker
@GRC Можете ли вы рассказать об этом немного? Кастинг - очень полезная функция при правильном использовании. – tangrs
'printf (" значение a:% d значение b:% d \ n ", * (int *) (& teste), * (int *) ((char *) & teste + offsetof (abcd, b))) ; ' – BLUEPIXY