5

如何使用指针算术打印结构的特定成员?我有一个有 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();
}
4

2 回答 2

11

使用offsetof提供的宏stddef.h

#include<stddef.h>

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

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

于 2011-12-28T15:42:43.383 回答
2

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

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

编辑:正如任何 C 程序员都应该知道的那样,使用指针算术访问结构成员是无用且危险的。无用是因为该->操作在访问命名成员时更加简洁和精确,并且由于幼稚地使用指针算术会导致许多问题而很危险。但是,指针算术是 OP 要求的,所以指针算术是他得到的。

于 2011-12-28T15:33:24.063 回答