【问题标题】:How to add multiple amount(s) of values to a struct如何将多个值添加到结构中
【发布时间】:2020-03-06 17:05:33
【问题描述】:

我需要创建一个可以向我的结构添加至少 10 个不同 x,y 值的函数

typedef struct Point
{
    float x, y;

}Point;

Point  createPoint(double x, double y){

    Point p[10];
    for (int i = 0; i < 10; ++i){
        if (isnan(p[i].x) == 0){
            p[i].x = x;
            p[i].y = y;
        }
    }

  for (int z = 0; z < 2; ++z){
        printf("%f\n", p[0].y);
  }

}

int main(){  
    createPoint(5, 6);
    createPoint(7, 9);
    return 0;
}

打印时,我在相同的数字 p[0] 处得到 2 个值,但我需要能够在不同的数字处达到不同的值

【问题讨论】:

    标签: c pointers struct scope nan


    【解决方案1】:

    数组p 是函数createPoint 的本地数组,在函数退出时超出范围。这意味着您在一个函数调用中所做的更改在下一个函数调用中不可见。

    另外,因为你没有初始化p 的值,你不能依赖它们包含NaN。事实上,试图读取一个未初始化的变量会调用undefined behavior

    您的p 数组对于main 函数应该是全局的或本地的,这样它的生命周期就可以扩展到对createPoint 的多次调用。您还应该为当前存储在p 中的元素数量单独保留一个计数器,以便您可以写入下一个可用插槽。

    void createPoint(Point *p, double x, double y, int *count)
    {
        p[*count].x = x;
        p[*count].y = y;
        (*count)++;
    }
    
    void printPoints(Point *p, int count)
    {
      for (int z = 0; z < count; ++z){
            printf("%f\n", p[z].y);
      } 
    }
    
    int main(){  
        Point p[10];
        int count = 0;
    
        createPoint(p, 5, 6, &count);
        createPoint(p, 7, 9, &count);
        printPoints(p, count);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2019-08-26
      • 2019-12-16
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      相关资源
      最近更新 更多