这是一个 struct 简单的C程序,但我不太明白我做错了什么,因为输出不是我想要的,

P1

#include<stdio.h>
struct book
{
    char name[10];
    char author[10];
    int refno;
};
//passing whole structure variable 
void display(struct book b)
{
    printf("%s %s %d",b.name,b.author,b.refno);
}
int main()
{
    
    struct book b1={"LET US C","YPK",25};
    display(b1);
}

在这里,这个命令可以很好地处理输出:

LET US C YPK 25
--------------------------------
Process exited after 0.3952 seconds with return value 0
Press any key to continue . . .

如果我试一试,会有BUT

struct{
// element -1;
//element -2;
//element-3;
}b1;

/*then*/
int main()
{
 b1={"LET US C","YPK",25};
display(b1);

它显示错误消息:-

1:[Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11
2:[Error] no match for 'operator=' (operand types are 'book' and '<brace-enclosed initializer list>')
3:[Note] candidate is:
4:[Note] book& book::operator=(const book&)
5:[Note] no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const book&'

如果我try 执行以下操作,将显示相同的消息:

struct book 
{
//elements declarations as p1
}b[10];

int main()
{
b[1]={"LET US C","YPK",25};
display(b[1]);
}

OR WITH

struct book
{
//elements declarations as p1
};
int main()
{
    struct book b[10];
    b[1]={"LET US C","YPK",25};
    display(b[1]);
}

那么问题出在哪里呢?

实际上,我的主要目标是定义 struct 数组,如倒数第二和倒数第二部分所示 方法,但它似乎不起作用,所以请帮助&gt;

推荐答案

在C中,语法{elem1, elem2, elem3, ...}只有在初始化 struct (或数组)而不赋值时才有效.这就是它在您的示例中不起作用的原因.

当您写入b[1]={"LET US C","YPK",25};时,您正在try 赋值,而不是初始化值.

简而言之:

Initializing表示将值赋给当前正在创建的变量

Assigning表示为已创建的变量赋值.

为了让你的例子起作用,你可以这样写

struct book
{
   char name[10];
   char author[10];
   int refno;
};
int main()
{
    struct book b[10];
    b[1]=(struct book){"LET US C","YPK",25};
         ^^^^^^^^^^^^   
  display(b[1]);
}

现在,您可以在任何地方声明 struct 变量,可以紧跟在 struct 声明之后,也可以在main函数中的任何位置,但需要注意的一点是,当您定义/赋值我使用的任何变量时 赋值运算符右侧的(struct book),它帮助编译器理解b[1]变量属于struct book数据类型,这纠正了程序中存在的错误.

C语言的这一特性称为compound literal.

C++相关问答推荐

为什么这个C程序代码会产生以下结果?

使用单个字节内的位字段

如何解决C中的严格别名?

将整数的.csv文件解析为C语言中的二维数组

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

如何在C语言中正确打印图形

为什么中断函数会以这种方式影响数组?

为什么此共享库没有预期的依赖项?

OpenSSL:如何将吊销列表与SSL_CTX_LOAD_VERIFY_LOCATIONS一起使用?

使用nmake for程序比Hello World稍微复杂一些

Caesar密码调试:输出文本末尾的问号和随机字符

Zlib:解压缩大文件导致";无效代码长度设置";错误

int * 指向int的哪个字节?

分配给静态变量和动态变量的位置之间有区别吗?

函数的typedef是标准 C 语法吗?它与函数指针的typedef有何不同?

Linux memcpy 限制关键字语法

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码

无法在线程内用 C 打印?

C 中类型说明符的顺序重要吗?

c 函数指针,另一种语法