如何使用指针算法打印结构的特定成员?我有一个有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();
}
答案 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所要求的,因此指针算法就是他得到的。