C语言计算一个结构体内成员地址的偏移量的两种方法(代码实例)

C语言计算一个结构体内成员地址的偏移量的两种方法(代码实例)


一、有时候需要需要看一下一个结构体内成员地址的偏移量,下面介绍两种实现方法。

二、实现方法。

1、方法一,包含头文件#include ,调用函数offsetof(struct s, i)来实现。

2、方法二,使用&(((s1*)0)->i)的形式。

三、实例测试。

1、c代码

       #include 
       #include 
       #include 

       int main(void)
       {
           struct s {
               int i;
               char c;
               double d;
			   char e;
               char a[];
           };
           typedef  struct  {
               int i;
               char c;
               double d;
			   char e;
               char a[];
           }s1;
           //Output is compiler dependent 
           printf("\nmethod one:\n");
           printf("offsets: i=%ld; c=%ld; d=%ld e=%ld a=%ld\n",
                   (long) offsetof(struct s, i),
                   (long) offsetof(struct s, c),
                   (long) offsetof(struct s, d),
				   (long) offsetof(struct s, e),
                   (long) offsetof(struct s, a));
           printf("sizeof(struct s)=%ld\n", (long) sizeof(struct s));

		   
		   printf("\nmethod two:\n");
		   
		   printf("offsets: i=%ld; c=%ld; d=%ld e=%ld a=%ld\n",
                   (long) &(((s1*)0)->i),
                   (long) &(((s1*)0)->c),
                   (long) &(((s1*)0)->d),
				   (long) &(((s1*)0)->e),
                   (long) &(((s1*)0)->a));
		   
		   
		     printf("sizeof(struct s1)=%ld\n", (long) sizeof(s1));
		   
           exit(EXIT_SUCCESS);
       }

2、编译&执行。

C语言计算一个结构体内成员地址的偏移量的两种方法(代码实例)_第1张图片

3、结果显示,两种方法都可以正确的计算结构体的偏移量。

你可能感兴趣的:(C和C++语言)