结构体(1)

1.结构体类型的概念

1.1结构体指的是一些值的集合,而这些值被称作为成员变量,结构体的每个成员都可以是不同种类的变量

1.2结构体的声明

举一个例子 描述颜色

#include <stdio.h>

struct Color
{
	int RED;//内部是;不是,
	int RGEEN;
	int BULE;
};Color-list;

又或者描述一个学生


struct student
{
	char num;
	int name;
	char SEX[5];
	float height;
};//不要忘记分号!

1.3 特殊结构体声明

在声明结构体的时候 可以进行不完全的声明

例如

struct
{
    char brand[20];
    int Speed;
    float moeny;
}Car,*p;
struct
{
    char brand[20];
    int Speed;
    float moeny;
}x;

如此 该结构体便是匿名结构体 注意 匿名结构体只能使用一次

接着 问题来了

在上面的两段代码的前提下 以下方式合法吗

p=&a 

 答案是 非法

为什么?

因为编译器会把上面两个结构体当作完全不同类型,所以是非法的

1.4 结构的自引用

在结构内是否可以包含一个类型为该类型本身的成员呢?

或许我们可能会这么用

struct Car
{
    char brand[20];
    int Speed;
    float moeny;
    struct Car tesla;
};

但是这样是错误的,仔细想想 ,因为在一个结构体内包含一个相同的类型的结构体变量 结构体就会无穷的大 无穷的小,(我身体里面有我,我有我的身体,我的身体又有我.......)

正确的自引用方式

struct Car
{
    char brand[20];
    int Speed;
    float moeny;
    struct Car* tesla;
};

在自引用的过程中,要是夹杂了typedef对匿名结构体类型的重命名,也容易发生问题

比如

typedef struct
{
    char brand[20];
    int Speed;
    Car*tesla;
}Car;

这样也是不行的 因为Car是对前面匿名结构体类型的重命名产生的,但是在匿名结构体内部提前创造成员变量,是不行的

解决方法如下:定义结构体就不要用匿名结构体了

typedef struct Car
{
    char brand[20];
    int Speed;
    struct Car*tesla;
}Car;

如此一来 便可使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值