void指针强转结构体指针问题

来源:互联网 发布:我的校园软件 编辑:程序博客网 时间:2024/06/07 22:37

====================================================================================================================================

1.程序,test.c

#include <stdio.h>#include <stdlib.h>typedef unsigned long u32; //64位机器为8字节,32位机器为4字节typedef struct my_struct{  u32 a;  u32 b;  u32 c;}mystruct;int main(){  void *test;  test = NULL;  test = malloc(1);  printf("test is %lx\n",test);  #define GPIO ((mystruct *)(test))  GPIO->a = 10;  GPIO->b = 20;  GPIO->c = 30;  printf("(&(GPIO->a)) is %lx\n",(&(GPIO->a)));  printf("(&(GPIO->b)) is %lx\n",(&(GPIO->b)));  printf("(&(GPIO->c)) is %lx\n",(&(GPIO->c)));  printf("GPIO->a is %d\n",GPIO->a);  printf("GPIO->b is %d\n",GPIO->b);  printf("GPIO->c is %d\n",GPIO->c);  free(test);  test = NULL;  return 0;}
2.编译gcc -o test test.cpp,我的机器是64位ubuntu。

3.结果./test

test is 17f2010(&(GPIO->a)) is 17f2010(&(GPIO->b)) is 17f2018(&(GPIO->c)) is 17f2020GPIO->a is 10GPIO->b is 20GPIO->c is 30