代码之家  ›  专栏  ›  技术社区  ›  RonanMacF

当指针指向时,无法使用箭头符号访问结构数据

  •  -2
  • RonanMacF  · 技术社区  · 6 年前

    我已经创建了一个结构数组,并且遇到了一个错误的访问错误。当我把所有的东西都换成点符号时,效果很好,这是为什么?

    typedef struct data{
        int num;
    }data;
    

    主要

    int main(void){
      // This works
      data data[4];
      data[0].num = 10;
      printf("Number is = %d\n", data[0].num);
    
      // This does not work
      data *data[4];
      data[0]->num = 10;
      printf("Number is = %d\n", data[0]->num);
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   David Schwartz    6 年前
    // This does not work
    data *data[4];
    data[0]->num = 10;
    printf("Number is = %d\n", data[0]->num);
    

    自从 data 是一个由四个指针组成的数组, data[0] 是这四个指针中的第一个。但它指向什么呢?因为你没有做过类似的事情 data[0] = malloc(sizeof(struct data)); ,它没有特别指出什么——未初始化的垃圾。尝试写入指针指向的内容会导致错误的访问错误,这并不奇怪。

    在取消引用指针之前,需要使指针实际指向某个对象。