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 に答える