c - 执行 typedef 时初始化结构数组

标签 c arrays initialization structure typedef

给定一个表示点的结构,如下所示:

typedef struct p
{
    char c;
    float x,y;
}P[2];

如何定义和初始化一个数组来表示包含点 A(1,0)B(3,0) 的直线?

在下面的代码中,它表示typedef 'P'已初始化(使用 typeof 代替):

#include<stdio.h>
typedef struct p
{
    char c;
    float x,y;
}P[2]={{'A',1.0,2.0},{'B',3.0,4.0}};
int main()

{
    printf("\n %c %f %f",P[0].c,P[0].x,P[0].y);
    printf("\n %c %f %f",P[1].c,P[1].x,P[1].y);
    return 0;
}

以下方法有效,但它改变了结构的定义:

#include<stdio.h>
typedef struct p
{
    char c;
    float x,y;
}point;
point P[2]={{'A',1.0,2.0},{'B',3.0,4.0}};
int main()

{
    printf("\n %c %f %f",P[0].c,P[0].x,P[0].y);
    printf("\n %c %f %f",P[1].c,P[1].x,P[1].y);
    return 0;
}

如何在不更改结构定义的情况下初始化该数组:

 typedef struct p
{
    char c;
    float x,y;
}P[2]; 

最佳答案

你在这里

#include <stdio.h>

typedef struct p
{
    char c;
    float x,y;
}P[2];

int main( void ) 
{
    P a = { { 'A', 1.0f, 2.0f }, { 'B', 3.0f, 4.0f } };

    printf( "a[0] = { %c, %f, %f }, a[1] = { %c, %f, %f }\n", 
            a[0].c, a[0].x, a[0].y, a[1].c, a[1].x, a[1].y );

    return 0;
}

程序输出为

a[0] = { A, 1.000000, 2.000000 }, a[1] = { B, 3.000000, 4.000000 }

考虑到 typedef 没有定义对象。它定义类型的别名。

在所示程序中,typedef 将名称 P 定义为类型 struct p[2] 的别名。

所以不要写例如

struct p a[2];

你可以直接写

P a;

关于c - 执行 typedef 时初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309986/

相关文章:

iphone - 以编程方式修改从 Nib 初始化的 UITableViewCell?

iOS 使用 init 来初始化我所有的值

c - C中的sprintf,循环永远不会结束

c++ - 如何在随机位置用特定数量的 1's and 0' 填充数组?

c - 数组检查从 0 到 size-1 的所有整数

javascript - 从具有自定义键值的对象数组创建对象

c++ - vs2010中的 vector 初始化

c - 在 C 中将双指针作为参数传递

c - C 中的多进程程序 - 无输出

地穴类型识别/etc/shadow