C语言 定义结构体变量

设有以下语句:
typedef struct S
{ int g; char h; } T;
则下面叙述中正确的是( )
A)可用S定义结构体变量 B)可用T定义结构体变量
C)S是struct类型的变量 D)T是struct S类型的变量
——答案是B

但是T本身就是一个结构体变量啊,则么能用T来定义结构体变量呢?
定义结构体变量的方法:

struct 结构体名
{成员表列};
struct 结构体名 结构体变量名;

struct 结构体名
{成员表列}变量名表列;

struct
{成员表列}变量名表列;

而typedef可以声明新的类型名,来代替已有的类型名,如:
typedef int INTEGER;
INTEGER i; //这里的i就是个整型变量了

所以我觉得本题中应该可以用S来定义一个新的结构体变量啊,为什么用T呢?

  首先,定义一个结构的一般形式为:
  struct结构名
  {
  //成员表列
  };
  成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:
  struct stu
  {
  int num;
  char name[20];
  char sex;
  float score;
  };
  在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。

  然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。
  int a;//定义一个int类型的变量a
  stu a; //定义一个stu类型的变量a
  int *p; //定义一个int类型的指针p
  stu *p; //定义一个stu类型的指针p
  int a[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型
  stu a[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
用typedef用来对结构体再定义一个类型名
这种定义方法定义的结构体,应该这样使用:
①struct S str;
②T str;
这两种效果是一摸一样的,你可以试试看,希望能帮到你。本回答被提问者和网友采纳
第2个回答  2019-04-11
1.结构体类型数据的定义方法和引用方法
定义结构体:struct
结构体名
{
成员列表
};
定义结构体类型的变量:有三种形式

定义类型时定义变量:struct
结构体类型名
{
成员列表
}变量名列表;

直接定义结构类型变量:struct
{
成员列表
}变量名列表;

由已定义的结构体类型来定义变量:struct
结构体类型名变量名列表;
引用结构体类型变量:在定义了结构体类型变量后,采用下列方法引用结构体类型的
变量:
结构体变量名.成员名
这里"."是成员(分量)运算符,它在所有的运算符中优先级最高。
使用结构体时注意:
(1)结构体类型和结构体类型变量是不同的概念,定义结构体类型变量时应先定义
结构体类型,然后再定义变量属于该类型。
(2)定义了—个结构体类型后,系统并没有为所定义的各成员项分配相应的存储空
间。只有定义了一个结构体类型变量,系统才为所定义的变量分配相应的存储空间。结构
体类型变量占用内存的字节数是所有成员占用内存长度之和。
(3)结构体成员的引用。如果一个结构体中又嵌套一个结构体,则要访问一个成员
时,应采取外层向内层逐级访问的方法。
求采纳为满意回答。
第3个回答  2019-08-14
前面一个貌似少了一个
typedef,这样a直接就是结构体变量
;后面一种是正确的,定义变量的时候需另外定义,struct
Node
a;
相似回答