结构体

结构体

一.定义:

一组变量的结合,这些变量之间可以毫无关联,类型各异,但大多情况下变量的存在都是为了描述一个事物。

二.关键字:

struct

三.使用场景:

要将一个大的变量当作一个原子,而这个变量本身却有着略微不同(属性相同但在数值上存在差别),需要对这个原子进行管理时,结构体便应运而生(在C语言中)。
例如:学校对学生的管理,将一个学生看作一个原子,而这些原子都有年龄,性别,年级…等的属性,但属于每个原子其属性的所携带的不同信息则成为其区分的标志。

四.声明与使用:

语法:

struct 结构体名称  //结构体类型
{
   成员变量
}变量列表;      //结构体变量名列表
//变量名就相当于 int ret; 这条语句中的ret一样

例如一个描述学生的变量:
1.只定义结构体类型,等到使用时在定义结构体变量

struct student
{
  char name[20];姓名
  char sex[5];//性别
  int age;//年龄
  int studentid[20];//学号
}//需要使用时则需要单独定义变量名称
struct student first;//第一个学生
struct student second,third;//第二,第三个学生

//也可以如此定义(用法上与上边没有太大差别):
typedef struct student//类型重定义
{
char name[20];姓名
  char sex[5];//性别
  int age;//年龄
  int studentid[20];//学号
}student;
//注意此时的student变为了一个变量类型,就如int一般

2.定义结构体类型时,同时定义结构体变量

struct student
{
 char name[20];//
 ......
 }first,second;
 //这样定义后的first,second拿起来就直接可以使用
 //使用方法如下
 first={“zhangsan","nan",19, "1701"};

3.不定义结构体类型,直接定义结构体变量(不完全声明):

struct 
{
char name[20];
......
}first,second;
//这种一个变量名只可使用一次

在这种定义方式下需要注意:

//结构体1.
struct
{
int a;
char b;
}x;
//结构体2.
struct
{
int a;
char b;
}ret,*p;

这俩个结构体为俩个类型的结构体因此代码

p=&x;

虽然可以执行,但其不合乎语法。就像把char型的地址赋给int型的指针;

五.自引用

自引用在链表的应用值得注意:
1.

typedef struct Node
{
int data;
Node* next;
}Node;

这个代码是有问题的,因为在类型重定义完成之前就使用了重定义之后的名称。应改为:

typedef struct Node
{
int data;
struct Node* next;
}Node;
struct Node
{
int data;
struct Node next;//在这里相当定义了一个struct Node型的next变量
               //应改为struct Node* next;创建一个此类型的next指针
};

六.结构体传参

考虑到函数传参时压栈时,结构体自身看可能较大,导致性能下降的因素,尽量传地址。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值