2015-11-11 95 views
-3

我有這樣的代碼:如何使用指向struct的指針訪問/修改struct內的變量?

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

typedef struct vector_{ 
    int x; 
    double y; 
    double z; 
} *vector; 

void modi(vector a); 

int main() { 
    vector var; 
    var->x = 2; 
    modi(var); 
    return 0; 
} 

void modi(vector a){ 
    printf("avant modif %d",a->x); 
    a->x = 5; 
    printf("avant modif %d",a->x); 
} 

我試圖運行它,但我得到一個分段錯誤。

問題很簡單:訪問/修改結構指針變量。

我期待在堆棧溢出,但我得到了我的問題,一個不完整的答案:https://stackoverflow.com/a/1544134

什麼是訪問的正確方法/修改在這種情況下(一個struct指針變量)?

+1

'矢量VAR =的malloc(的sizeof(矢量));'如果你打算這樣做,這樣你必須分配空間...... – Kevin

+1

也許你並沒有試圖隱藏自己的typedef間接背後你不會迷惑自己? – EOF

+2

@Kevin'vector var = malloc(sizeof(* var));' – BLUEPIXY

回答

1

請嘗試這個,它的工作原理,我擴大了一點。請閱讀代碼中的註釋。

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

struct vector_ 
{ 
    int x; 
    double y; 
    double z; 
}; 

typedef struct vector_ *vector; 
void modi(vector a); 

int main() 
{ 
    struct vector_ av; // we have a structure av 
    vector var = &av;  // pointer var points to av 
    var->x = 2; 

    printf("\ndans main() avant call to modi() %d", var->x); 

    modi(var); 

    printf("\ndans main() apres call to modi() %d", var->x); 
    return 0; 
} 

void modi(vector a) 
{ 
    printf("\ndans modi() avant modif %d", a->x); 
    a->x = 5; 
    printf("\ndans modi() apres modif %d", a->x); 
} 
相關問題