2011-12-28 67 views
1

如何使用指针运算来打印结构的特定成员?我有一个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

没有“指针的记忆”之类的东西。也许你的意思是“操纵指针”? – 2011-12-28 15:32:39

+0

你为什么要这样做,而不是使用' - >'运算符? – 2011-12-28 15:33:00

+0

@ mr.anubis当然是。 – 2011-12-28 15:43:01

回答

1

指针类型,从而让增量添加正确的尺寸是正确的:

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

编辑:作为任何C程序员应该知道,使用指针运算访问结构成员是没用的和危险的。没用,因为->操作在访问指定成员时更加简洁和精确,而且由于天真使用指针算术会导致一系列问题,所以很危险。然而,指针算术是OP要求的,所以指针算术就是他得到的。

+0

如果结构是struct foo {char d; int v; }',那么你将不得不重新编辑这一行。 – 2011-12-28 15:39:33

+0

@Anubis先生:取决于填充。不知道OP为什么要使用指针运算来访问成员(而不是' - >'),所以我希望这个问题不会出现。 – thiton 2011-12-28 15:41:35

+0

这是非标准的,所以不应该是首选! – 2011-12-28 17:29:12

10

使用offsetofstddef.h提供:

#include<stddef.h> 

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

任何其他方式运行到填充/对齐问题。