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)
任何其他方式都会遇到填充/对齐问题.
指针类型需要正确,以便增量添加正确的大小:
printf("%d",*( ((int*)ptr) +1));
Run Code Online (Sandbox Code Playgroud)
编辑:任何 C 程序员都应该知道,使用指针算术访问结构成员是无用且危险的。无用是因为该->
操作在访问命名成员时更加简洁和精确,而危险是因为简单地使用指针算术会导致许多问题。然而,指针算术是OP所要求的,所以指针算术就是他得到的。