- 论坛徽章:
- 0
|
#include<stdio.h>
struct struct_s
{
int a;
};
int main(void)
{
struct struct_s test[3];
test[0].a = 4;
test[1].a = 5;
test[2].a = 6;
int num = 3;
int *aptr = #
struct struct_s *pointer;
printf("the number is:%d\n",(char*)aptr);
printf("the number is:%d\n",(int)(&test[0].a));
printf("the number is:%d\n",(int)(&test[1].a));
printf("the number is:%d\n",(int)(&test[2].a));
printf("the number is:%d\n",(int)(&((struct struct_s*)0)->a));
printf("the number is:%d\n",((char*)aptr-(int)(&test[0].a)));
printf("the number is:%d\n",((char*)aptr-(int)(&test[1].a)));
printf("the number is:%d\n",((char*)aptr-(int)(&test[2].a)));
printf("the number is:%d\n",((char*)aptr-(int)(&((struct struct_s*)0)->a)));
pointer = (struct struct_s*) ((char*)aptr - (int)(&((struct struct_s*)0)->a));
printf("the pointer address is:%d\n",(int)&pointer);
printf("the number is:%d\n",pointer->a);
return 0;
}
我用这个程序查看打印的地址值
结果发现 printf("the number is:%d\n",(int)(&((struct struct_s*)0)->a));
这句打印的整数值就是等于0!
如果是值是0,那为什么还要多写(int)(&((struct struct_s*)0)->a这句呢?
很想看看这个函数的应用啊!!!!
达人们,如果你有空请给我个例子让我看看 |
|