带结构的指针算法

时间:2011-12-28 15:30:23

标签: c pointers pointer-arithmetic

如何使用指针算法打印结构的特定成员?我有一个有2名成员的结构。我想通过操纵指向该结构的指针的内存来打印成员j

#include <stdio.h>
#include <conio.h>

typedef struct ASD
{
    int i;
    int j;
}asd;

void main (void)
{
    asd test;
    asd * ptr;

    test.i = 100; 
    test.j = 200;
    ptr = &test;

    printf("%d",*(ptr +1));

    _getch();
}

2 个答案:

答案 0 :(得分:10)

使用offsetof中提供的stddef.h宏:

#include<stddef.h>

main()
{
    asd foo = {100, 200};
    unsigned char* bar = (void*)&foo;
    printf("%d\n", *(int*)(bar+offsetof(asd, j)));
}

任何其他方式都会遇到填充/对齐问题。

答案 1 :(得分:2)

指针类型必须正确,以便增量添加正确的大小:

printf("%d",*( ((int*)ptr) +1));

编辑:正如任何C程序员应该知道的那样,使用指针算法来访问struct成员是没用的,也是危险的。没用,因为->操作在访问命名成员时更加简洁和精确,并且因为天真使用指针算法会导致许多问题而变得危险。但是,指针算术是OP所要求的,因此指针算法就是他得到的。