C语言中结构的数组变量的初始化和声明

Initialization and declaration of array variable of a structure in C

提问人:Swagnik 提问时间:3/12/2022 最后编辑:Vlad from MoscowSwagnik 更新时间:3/12/2022 访问量:36

问:

我在尝试编译此代码时遇到错误.......尝试了不同的 IDE

#include<stdio.h>
#include<stdlib.h>
struct car{
        int price[5];
    }c1;
int main(){
    c1.price[5]={10,20,30,40,50};
}

错误:

7 14 D:\CODING\c programs\Struct.c [错误] '{' 标记前的预期表达式

数组 C 结构 体初始化 赋值运算符

评论

2赞 David Schwartz 3/12/2022
这根本不是合法的 C。如果您在 C 书或 C 网页中看到过它,请不要使用该书或网页。如果你不是从书本或网页上学到的,那么你就不应该使用它。你无法通过编造东西并看看它们是否有效来学习 C,至少在你对基础知识有更深入的理解之前是这样。
0赞 David Schwartz 3/12/2022
(一旦你掌握了足够的基本信息,就可以通过实验来学习 C,从而准确地理解该错误消息告诉你的内容。没有它,你就无法通过语法试错来学习 C,因为你无法从错误中学习。
0赞 Swagnik 3/12/2022
我在编写简单代码时收到此错误。我只是通过让它更简单来使我的怀疑变得精确.......
0赞 Swagnik 3/12/2022
@DavidSchwartz如果你没有答案,你可以跳过而不是投入!
0赞 David Schwartz 3/12/2022
这意味着放弃教授关于如何学习C语言的重要课程的机会,知道你可以通过实验学到什么,什么时候不能,这几乎是必不可少的。

答:

0赞 UnprolificToad 3/12/2022 #1

这是无效的 C。 您只能在定义时静态初始化数组。如下所示:

int price[5] = {10,20,30,40,50};

否则,必须使用下标来初始化数组:

c1.price[0] = 10;
c1.price[1] = 20;
c1.price[2] = 30;
c1.price[3] = 40;
c1.price[4] = 50;

试着阅读《Ritchie & Kernighan 的 C 编程语言》一书,先感受一下这门语言。

0赞 Vlad from Moscow 3/12/2022 #2

在此声明之后

struct car{
    int price[5];
}c1;

已创建已定义的对象及其数据成员。c1

所以在这份声明中

c1.price[5]={10,20,30,40,50};

您正在尝试将一个带支撑的列表分配给索引等于 的数组中不存在的元素。5

即使你会写

c1.price = {10,20,30,40,50};

但是,数组没有赋值运算符。

您可以在定义对象时初始化对象的数据成员。例如pricec1

struct car{
    int price[5];
}c1 = { .price={10,20,30,40,50} };

否则,要更改数据成员价格的值,您应该使用循环,例如

for ( size_t i = 0; i < sizeof( c1.price ) / sizeof( *c1.price ); i++ )
{
    c1.price[i] = ( int )( 10 * ( i + 1 ) );
}

评论

0赞 Swagnik 3/24/2022
谢谢。。。。。。。。。。。。。这解释了很多 😃😃😃