C 构造类型

C 结构类型?

#include <stdio.h>

struct{
  int  x;
  char y;
}kk;

int main()
 {
   struct kk a={1,'Q'};
   printf("%d\n",a.x);
 }


a.c: In function ‘main’:
a.c:10: error: variable ‘a’ has initializer but incomplete type
a.c:10: warning: excess elements in struct initializer
a.c:10: warning: (near initialization for ‘a’)
a.c:10: warning: excess elements in struct initializer
a.c:10: warning: (near initialization for ‘a’)
a.c:10: error: storage size of ‘a’ isn’t known

为什么出错?

------解决方案--------------------

//方法1
#include <stdio.h>
 
struct{
  int  x;
  char y;
}a={1,'Q'}; // 定义a是匿名/无名的struct类型变量,注意这个匿名,表示此struct类型是没有名字的
  
int main()
 {
   printf("%d\n",a.x);
 }


//方法2
#include <stdio.h>
 
struct TT{
  int  x;
  char y;
}; //定义struct类型,名字为TT
 
 int main()
 {
   struct TT a={1,'Q'}; // 定义struct TT类型的变量a
   printf("%d\n",a.x);
 }


//方法3
 
#include <stdio.h>
 
struct TT{
  int  x;
  char y;
}a={1,'Q'};; // 定义struct TT类型同时定义此类型的变量a
 
int main()
 {
   printf("%d\n",a.x);
 }


//方法4
#include <stdio.h>
 
typedef struct {
  int  x;
  char y;
}kk; // 先定义一个匿名的struct类型,然后通过typedef给这个匿名类型定义另外一个名字kk
 
int main()
 {
   kk a={1,'Q'};
   printf("%d\n",a.x);
 }