访问struct的指针成员数据

时间:2014-01-11 19:00:32

标签: c pointers struct

我正在尝试访问作为结构成员的指针的数据。

typedef struct
{
    int i1;
    int* pi1;
} S;


int main()
{
    S s1 = { 5 , &(s1.i1) };

    printf("%u\n%u\n" , s1.i1 , s1.pi1 ); //here is the problem 

return 0;
}

问题在于printf的第二个参数。当我运行程序时,我在控制台中得到以下结果:5 ...(下一行)2381238723(每次都不同)。 这是正确的,结果并不出乎意料。我尝试过这样的事情:

*(s1.pi1) 

s1.*pi1

它们都不起作用。 C或方法中是否有任何操作符可以执行此操作?

2 个答案:

答案 0 :(得分:3)

我猜这里,但我认为你可能打算做以下事情:

typedef struct
{
    int i1;
    int* pi1;
} S;


int main()
{
    // Take the address of s1.i1, not s1.pi1
    S s1 = { 5 , &(s1.i1) };

    // Dereference s1.pi1
    printf("%u\n%u\n" , s1.i1 , *s1.pi1 );

    return 0;
}

答案 1 :(得分:1)

通过godel9的建议和评论,我推断您找到了获得预期结果的方法

你写道:我尝试过这样的事情:

*(s1.pi1)s1.*pi1

我感觉到那里的混乱。

mystruct.pointer表示您可以访问指针,现在可以使用,获取,比较..地址。

*(mystruct.pointer)表示您已取消引用指针,现在为giv,take,increment .. value。

请记住,指针只是存储地址(!)的变量,但比普通地址更通用。