我有以下代码:

#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指针变量)访问/修改的正确方法是什么?

最佳答案

请尝试一下,它有效,我扩大了一点。请阅读代码中的注释。

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

09-10 04:54