结构体的简单介绍(1)

目录

概念:

与数组类比:

结构体声明:

注意:

结构体变量、全局变量、局部变量:

 结构体声明中包含其他结构体变量:

结构体变量的初始化:

包含了其他结构体变量的初始化:

初始化的顺序: 

 结构体变量的打印:

包含其他结构体变量的打印:

使用指针变量名的打印:

 结构体变量的传参:

直接传参:

地址传参:

 两种传参的区别:


                                        

概念:

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

 或者说结构体是描述一个复杂的对象,比如说人,人有年龄身高体重等等数据,当需要描述一个人时,就需要结构体。

与数组类比:

数组是同一种类型的元素的集合,而结构体也是一种结合,且结构体内部的元素可以是不同类型的数据。

结构体声明:

struct tag
{
 member-list;
}variable-list;
  • struct是结构体的关键字,不可更改。
  • tag是结构体的名字,或者标签,可以更改。
  • member-list 结构体的成员列表,表示结构体内部的元素。
  • variable-list 结构体的变量成员列表,表示类型是结构体的变量,可以省略。

注意:

声明只是表示结构体的类型,并不占内存的空间,只有结构体变量初始化或者进行改变的时候,才会占用内存空间。

结构体变量、全局变量、局部变量:

比如:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
}p1,p2;

int main()
{
  return 0;
}

 p1和p2都是结构体struct peo类型的变量,而且是全局变量。

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

int main()
{
 
  struct peo p;
  return 0;
}

p是结构体 struct peo类型的变量,但是它是局部变量。

 

 结构体声明中包含其他结构体变量:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

struct st
{
   struct peo p;
   int num;
   float f;  
};

int main()
{
 
  struct peo p;
  return 0;
}

结构体struct st中包含了结构体struct peo类型的变量 p 

结构体变量的初始化:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  return 0;
}

 

包含了其他结构体变量的初始化:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

struct st
{
   struct peo p;
   int num;
   float f;  
};

int main()
{
 
  struct st s = { {"lisi","15596668888","女",166},108,3.14f};
  return 0;
}
  • 在包含其他结构体的变量时,进行初始化也要把其他结构体变量中的内容进行初始化。
  • 比如以上代码中的{"lisi","15596668888","女",166}就是结构体声明struct st中的另一个结构体变量struct peo p的变量的初始化。 

初始化的顺序: 

 记住需要按照结构体成员的顺序初始化

 

不按照顺序则需要按照以上写法使用 操作符   .  加上成员名 = 初始化的数据 

但是以上两种的打印方式是一样的。  

 结构体变量的打印:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
  return 0;
}

结构体打印的时候需要使用操作符 “  ” 进行指引。

格式:结构体变量名 . 结构体成员名

包含其他结构体变量的打印:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

struct st
{
   struct peo p;
   int num;
   float f;  
}

int main()
{
 
  struct st s = { {"lisi","15596668888","女",166},108,3.14f};
  printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
  return 0;
}

包含其他结构体变量的打印方式如以上代码所示。

本结构体变量名.其他结构体变量名.列表成员名 —打印出其他结构体变量内部的结构体成员名的格式。

使用指针变量名的打印:

 

 结构体变量的传参:

直接传参:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

void print1(struct Peo p)
{
   printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  print1(p);
  return 0;
}

地址传参:

struct Peo
{
   char name[20];
   char tele[12];
   char sex[5];
   int high;
};

void print2(struct Peo *sp)
{
   printf("%s %s %s %d\n",sp->name, sp->tele,sp->sex,sp->high);
}

int main()
{
 
  struct peo p = {"张三","15596668862", "男", 181};
  print2(&p);
  return 0;
}

传参地址,在打印的时候需要使用指针名->结构体成员名的格式

void print2(struct Peo *sp)
{
   printf("%s %s %s %d\n",sp->name, sp->tele,sp->sex,sp->high);
}

void print1(struct Peo p)
{
   printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}

 两种传参的区别:

  • 实参直接传给形参,其实是一种拷贝,形参也要开辟一个和实参一样大的空间,而后将实参的数据拷贝给形参,但是这样子会造成空间浪费,拷贝数据时也会浪费相对因的时间,若实参越大,浪费的空间越大,拷贝的时间越多。
  • 把结构体变量的地址作为实参传递给形参,形参就只需要创建一个指针的变量空间,通过这个指针变量找结构体的所在空间位置,进行读取数据。

 结论:所以结构体传参的时候一般使用传递结构体变量的地址进行传参。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值