2015-05-10 205 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; 
}