Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /////////////////////////////////////
- struct T
- {
- int n;
- T *p;
- };
- ///////////////////////////////////////////////
- int main()
- {
- int n = 5;
- int *p = (int*)malloc(4);
- *p = 85;
- printf("*p = %d\n", *p);
- int &r = *p;
- printf(" r = %d\n", r);
- free(p);
- }
- #include <iostream>
- #include <stdio.h>
- #include <stddef.h>
- using namespace std;
- //////////////////////////
- struct T
- {
- int n;
- float f;
- char c;
- };
- void foo(T *);
- //////////////////////////////////////////////////////
- int main() //
- {
- T t1;
- t1.f = 3.14;
- t1.n = 1980;
- printf("size of t1 = %d\n", sizeof(T) );
- // этот код как получить смещение полей структуры на
- int offset1 = offsetof(struct T, n);
- int offset2 = offsetof(struct T, f);
- // выводим значения смещений на экран
- printf("Offsets:\n");
- printf("offset1 = %d <> offset2 = %d\n\n", offset1, offset2);
- // выводим значения полей структуры на экран
- printf("Struct field:\n");
- printf("n = %d <> f = %f\n\n", t1.n, t1.f);
- // здесь я пробую изменить значение поля n структуры
- char *p = (char *) &t1;
- *((int *)(p + offset1)) = 5;
- // выводим значения полей структуры на экран
- printf("Change field n:\n");
- printf("n = %d <> f = %f\n\n", t1.n, t1.f);
- foo(&t1);
- }
- //////////////////////////////////////////////////////
- void foo(T *pt) //
- {
- printf("Struct field:\n");
- int *pn = (int*)pt;
- printf("n = %d\n", *pn);
- pn++;
- printf("f = %.2f\n", *(float*)pn);
- printf("f = %.2f\n", (float*)(&pn[0]));
- }
- /*
- //////////////////////////////////////////////////////
- void foo(T *pt) //
- {
- printf("Struct field:\n");
- // такой способ получения значения структуры заработал у меня только потому что первое поле сделал типом int
- printf("n = %d\n", *((int *)(pt)));
- // здесь я уже забуксовал хотя догадываюсь, что это из-за того, что я не понимаю как в памяти хранится вещественное число
- printf("f = %f\n\n", *( (double *)(int *)(pt) + 4) );
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement