2015-11-11 55 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); 
} 
相关问题