声明后初始化结构

时间:2020-08-25 14:27:07

标签: c struct scope

我有一个名为point的结构,它存储变量xy

typedef struct point{
    int x, y;
}point;

在函数内部,我定义了一组类型为point的结构,供以后在程序中使用。

point p1,p2,p3,p4;

然后我稍后尝试在检查条件的if语句中初始化变量。尝试初始化变量时,我不断收到不同的错误。完成我想做的事情的正确方法是什么?

if(check1 != 0){
    p1 = { x, y };
}else if(check2 != 0){
    p2 = { x, y };
}else if(check3 != 0){
    p3 = { x, y };
}else if(check4 != 0){
    p4 = { x, y };
}

编辑:作为变量名的数字仅出于示例目的,在程序的其余部分中其他内容也是如此。抱歉造成混乱!

3 个答案:

答案 0 :(得分:1)

标识符(作为变量名)不能以数字开头。大多数情况下,您使用字母。建议您声明如下变量:

point point1, point2, point3, point4;

答案 1 :(得分:1)

使用compound literals,您可以这样做:

p1 = (struct point){ x, y };

答案 2 :(得分:1)

首先,初始化是在声明过程中为变量提供值时。您只能这样做一次。稍后给它赋值称为 assignment

编写代码的正确方法是使用数组和循环,以实现简单的线性搜索算法。示例:

bool  check [N] = /* something */ ;
point point_arr [N];

for(int i=0; i<N; i++)
{
  if(check[i] != 0)
  {
    point_arr[i].x = x;
    point_arr[i].y = y;
    break; // break the loop and stop searching here
  }
}

另一种语法是使用所谓的复合文字并编写
point_arr[i] = (point) {x, y};,与上面的代码等效。