c语言中结构体的声明,自引用,以及变量的定义和初始化

  

<强> 1。结构体的声明

  

<强>首先呢,结构是一些值的集合,这些值称为成员变量,结构的每个成员变量可以是不同类型的变量。

  

一般的声明

  
 <代码> struct书
  {
  char[100]名称;//书名
  浮动价格;//价格
  }b1、b2;//全局变量
  
  结构体书b3;//全局变量//并且上面两种表示方式是相同的意思
  
  int main ()
  {
  结构体书b5;//这里的变量叫做局部变量
  返回0;
  } 
  

特殊的声明

  
 <代码>结构
  {
  int;
  字符b;
  浮动c;//此处未完全声明变量,缺少了结构体标签//这种叫做匿名结构体类型
  }b;
  
  结构体
  {
  int;
  字符b;
  浮动c;
  
  }* ps;//结构体的指针变量,用来存储地址
   之前
  

<>强! !但是ps=x;
这种写法是不合法的,编译器认为这两种不同的写法是两个不同的类型。

  

<强> 2。结构体的自引用

  

<强> 此处,我们用一个例子来讲述我们来表述一个数据结构链表中的节点

  
 <代码>结构节点
  {
  int数据;
  结构节点*下;
  
  };
  
  int main ()
  {
  结构节点={3零};
  结构节点b={5,和一个};
  printf (" % d \ n”, b.data);
  printf (" % p \ n " b.next);
  系统(“暂停”);
  返回0;
  }
   之前
  

 c语言中结构体的声明,自引用,以及变量的定义和初始化

  

<强>下面的地址便是结构体中b指向的地址,即一个的地址。

  <人力资源/>   

<强> ! ! !很重要的一点,当结构体自引用的时候,不可写成匿名结构体类型。

  

例题如下

  
 <代码>类型定义结构体
  {
  int数据;
  节点*下;
  
  }节点; 
  

<强>在此处编译会出现错误,是由于节点在末尾端才定义,但在结构体内部便已经被调用,这样是非法的。

  

正确的写法如下:

  
 <代码> typedef结构节点
  {
  int数据;
  结构节点*下;
  
  }节点; 
  

<强> 3。结构体变量的定义和初始化

  

简单结构体的初始化

  
 <代码>结构点
  {
  int x;
  int y;
  
  };
  
  int main ()
  {
  struct点p2={1,2};//定义一个局部变量p2并且给其进行赋值
  printf (" % d % d \ n”, p2。x, p2.y);
  系统(“暂停”);
  返回0;
  } 
  

结构体嵌套的初始化

  
 <代码>结构点
  {
  int x;
  int y;
  };
  结构节点
  {
  int数据;
  struct点p;
  结构节点*下;
  
  };
  
  int main ()
  {
  结构节点n1={零}5 {1,2};
  结构节点n2={8 {3、4}, n1};
  printf (" % d \ n”, n2.next→数据);
  printf (" % d % d \ n”, n2.next→p。x, n2.next→p.y);
  printf (" % p \ n " n2.next);
  
  系统(“暂停”);
  返回0;
  } 
  

 c语言中结构体的声明,自引用,以及变量的定义和初始化

c语言中结构体的声明,自引用,以及变量的定义和初始化