指针指针的语法是什么?

时间:2015-05-10 03:05:41

标签: c pointers

假设我有两种结构,

this.SetCrossPageValue("my cross page value");
var crossPageValue = this.GetCrossPageValue();

主要功能如下:

struct ptr1
{
    struct ptr2 *ptrtoptr;
};

struct ptr2
{
    int name;
};

如何通过指针int main() { struct ptr1 *var1; struct ptr2 *var2; (code for manipulating structure element name); return 0; } 操纵变量name的数据?假设两个指针都已指向某个地址。

这是对的吗? var1var1->(var2->name)=(some value)

2 个答案:

答案 0 :(得分:7)

  

如何通过指针var1操作变量名的数据?

使用:

var1->ptrtoptr->name =  some_value ; // or (var1->ptrtoptr)->name

var1->(var2->name)=(some value)(var1->var2)->name=(some value)都没有意义,因为var2不是ptr1的成员,无法使用var1 <无法访问-> / p>

注意:另外,请注意操作员关联性,操作员var1->(ptroptr->value)具有从左到右的关联性,因此var1->ptrtoptr->name与{{1}不一样}

答案 1 :(得分:0)

我想说编写有助于分配和释放结构的函数非常重要。这将有助于防止内存泄漏,什么不是。我写了一个示例程序来展示我的意思。另一个最佳答案准确地回答了你的问题,我只是想加上我的两分钱。

#include <stdio.h>
#include <stdlib.h>

struct ptr1
{
    struct ptr2 *ptrtoptr;
};

struct ptr2
{
    int name;
};

struct ptr1* createPtr1() {
    struct ptr1* var1 = (struct ptr1 *) malloc(sizeof(struct ptr1));
    var1->ptrtoptr = (struct ptr2 *) malloc(sizeof(struct ptr2));

    return var1;
}

void freePtr1(struct ptr1* var1) {
    free(var1->ptrtoptr);
    free(var1);
}

int main()
{
    struct ptr1 *var1;
    struct ptr2 *var2;

    var1 = createPtr1();
    var1->ptrtoptr->name = 42;

    printf("%d\n", var1->ptrtoptr->name);
    freePtr1(var1);

    return 0;
}