构造并将值传递给他们

时间:2016-12-09 03:28:12

标签: c struct

如果我有一个数组,如int数[5],我可以用数字[0] = 1或数字[3] = 4为它赋值。然后如果我有一个结构,如

struct structName
{
    int number0;
    int number1;
    int number2;
};

有没有办法做类似下面的事情(注意这不是工作代码)

int main(void)
{
    struct structName name;  //how could i declare this to do the following
    for(int i = 0; i < 2; i++)
    {
        name[i] = i;  //maybe  name.[i]
    }
}

有没有办法写名[variable] = someNumber来指定someNumber来表示number0(如果变量为0)或number2(如果变量为2)。香港专业教育学院一直在寻找天,并找不到任何能做到这一点。 (也许我只是不知道该找什么)

5 个答案:

答案 0 :(得分:5)

  

有什么方法可以做类似下面的事情

不,没有办法通过索引访问结构的字段。您可以使用字段的名称:

struct structName name;
name.number0 = someNumber;
name.number1 = someOtherNumber;

如果要通过索引访问值,请使用数组,即使它嵌入在结构中:

struct structName
{
    int numbers[3];
    // other fields here
};

然后你可以说:

struct structName name;
for (int i = 0; i <= 2, i++) {
    name.numbers[i] = i;
}

答案 1 :(得分:3)

您可以编写一个使用switch语句的函数,该语句允许您按索引访问字段。类似的东西:

#include<stdio.h>

struct structName{
    int number0;
    int number1;
    int number2;
};

void assign(struct structName * name, int i, int j){
    switch(i){
        case 0:
            name->number0 = j;
            break;
        case 1:
            name->number1 = j;
            break;
        case 2:
            name->number2 = j;
            break;
    }
}

int main(void){
    int i;
    struct structName name;
    for(i = 0; i <= 2; i++){
        assign(&name,i,i);
    }
    //test:
    printf("%d\n",name.number0);
    printf("%d\n",name.number1);
    printf("%d\n",name.number2);
    return 0;
}

(按预期打印0,1,2)。

毋庸置疑,这样做没有太大意义(与只有一个数组的字段相对)除非所讨论的结构已被定义为API的一部分或已经是代码库的一部分,不容易重构。

答案 2 :(得分:1)

是的,有一些奇怪的,不可取的内存操作。你使用数组会好得多。

struct structName
{
    int numbers[3];
};

int main(void)
{
    struct structName name;
    for(int i = 0; i <= 2; i++)
    {
        name.numbers[i] = i;
    }
}

另请注意,您的for循环中存在一些语法错误和一个错误。

答案 3 :(得分:-1)

带参数的宏应该可以工作

#define name(x) x

因此名称(1)将变为1.名称(2)将变为2,依此类推。

答案 4 :(得分:-1)

在C中,没有勺子。

struct structName name;
int *idx = &name; // First we need a memory address to the struct
for (int i = 0; i < sizeof(name) / sizeof(*idx); ++i) {
    // idx[i] == name.numberX
    idx[i] = i;
}

现在,如果你检查name.number0,name.number1,name.number2的值,你会看到它们包含正确的值。

这不是用结构做事的一种非常好的方式,但在最高回应声称不可能之后,我觉得有必要回答。