没有结构名称的结构

fud*_*din 4 c

下面定义的结构没有结构名称.而且我无法得到阵列部分.提前致谢. 结构数组中的值是什么意思?

#include <stdio.h>
int main()
{
    struct
    {
        int x,y;
    } s[] = {10,20,15,25,8,75,6,2};
    int *i;
    i = s;

    clrscr();
    printf("%d\n",*(i+3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

zwo*_*wol 10

现在我们有一个可以回答的问题:

struct
{
    int x,y;
} s[] = {10,20,15,25,8,75,6,2};
Run Code Online (Sandbox Code Playgroud)

这声明了一个名为s匿名结构的数组.每个结构都有两个int字段.未指定数组大小,因此它将保持初始化列表所需的大小("初始化列表"是等号后括号括起的数字列表的技术术语).

教科书中的代码很草率; 它没有标记初始化列表中的子结构; 这是允许的,但被认为是糟糕的风格.编译器解释它与代码完全相同:

struct
{
    int x,y;
} s[] = { {10,20}, {15,25}, {8,75}, {6,2} };
Run Code Online (Sandbox Code Playgroud)

每个大括号括起来的数字初始化数组的一个元素s.第一个数字初始化x,第二个数字y.所以,所有这些都是真的:

s[0].x == 10
s[0].y == 20
s[1].x == 15
s[1].y == 25
Run Code Online (Sandbox Code Playgroud)

等等.

  • 小心术语 *anonymous struct*:它似乎在 C11 中意味着其他东西,这里更好的名称是 *unnamed struct*:http://stackoverflow.com/a/14248127/895245 (2认同)

Xin*_*nus 5

每当您确实需要引用struct不超过一次时,创建它的变量而不给它命名是有意义的。

在 C 语法中实现它是

struct{
/*
.
.your structure members
.
*/
}<variable name>;
Run Code Online (Sandbox Code Playgroud)

在你的情况下s是一个数组

struct 
   {
      int x,y;
   }
Run Code Online (Sandbox Code Playgroud)