2015-05-10 157 views
4

比方说,我有两个结构,指针指针的语法是什么?

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; 
} 

如何通过一个指针var1操纵变量name的数据?假设两个指针都已经指向某个地址。

这是正确的吗? var1->(var2->name)=(some value)(var1->var2)->name=(some value)

回答

7

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

使用:

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

既不的var1->(var2->name)=(some value)(var1->var2)->name=(some value)是有意义的,因为var2不是ptr1成员,不能使用var1


注访问:另外,请注意操作员的关联性,操作爱适易->已经离开的左联,因此var1->(ptroptr->value)不会一样var1->ptrtoptr->name

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; 
}