带结构的指针算法

RSt*_*yle 2 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();
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 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)));
}
Run Code Online (Sandbox Code Playgroud)

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


thi*_*ton 2

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

printf("%d",*( ((int*)ptr) +1));
Run Code Online (Sandbox Code Playgroud)

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