给定一个表示点的结构,如下所示:
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/