C语言数据结构拦路虎(一)-概念解释

指针的内容需要自己理解,这里不再解释了。

下面是个人理解,也许有的地方理解错了,欢迎指出和交流

结构体

C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。

结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。

结构体的定义形式

struct 结构体名{
    结构体所包含的变量或数组
};

此外,我们也可以直接省略掉结构体名  可以省略但是不建议省略

如果省略变量名, 则变成对结构的申明,结构体的声明只是告诉编译器该如何表示数据,但是它没有让计算机为其分配空间

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
};

注意大括号后面的分号;不能少,这是一条完整的语句。

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)

结构体变量

既然结构体是一种数据类型,那么就可以用它来定义变量。

struct stu stu1, stu2;

定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

我的理解:结构体名不同,相当于不同的数据类型。

例如:

#include<stdio.h>
int main()
{
	//定义一个结构体 名为student  student类型的结构体变量stu1

	struct student
	{
		double height;//double类型  体重
		char * name;//字符串 名字
	}stu1;

	//定义一个结构体 名为teachar  teachar 类型的结构体变量tch1

	struct teachar
	{
		double height;//double类型  体重
		char * name;//字符串 名字
	}tch1;

	//进行赋值显示
	stu1.name="bzc";
	printf("name:%s\n",stu1.name);

	tch1.name="bzc";
	printf("name:%s\n",tch1.name);
	
	return 1;
}

你也可以在定义结构体的同时定义结构体变量:

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2;

通过“结构体变量名.成员名”的方式给结构体成员赋值
    stu1.name = "Tom";
    stu1.num = 12;
    stu1.age = 18;
    stu1.group = 'A';
    stu1.score = 136.5;

读取结构体成员的值
printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);

有没有觉得很麻烦,我们隐隐约约察觉到,多写一个struct很费劲,因此才有了下面的typedef

typedef

参考文章链接:https://blog.csdn.net/libing403/article/details/73402411

定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。

使用typedef时要记住,typedef并没有创建任何新类型,它只是为某个已存在的类型增加一个方便使用的标签。

它与#define有3个不同点:

(1)与#define不同,typedef创建的符号名只受限于类型,不能用于值。

(2)typedef由编译器解释,不是预处理器。

(3)在其受限范围内,typedef比#define更灵活。

用法

1) 为基本数据类型定义新的类型名

示例:假设要用BYTE表示1字节的数组。

typedef unsigned char BYTE;
  • 随后就可以用BYTE来定义变量:
BYTE X,Y[10],*Z;
  • 上面一行代码就相当于
unsigned char X,Y[10],*Z;

2) 为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称

参考文章链接:http://c.biancheng.net/view/298.html

struct Point
{
    double x;
    double y;
    double z;
};

在调用这个结构体时,我们必须像下面的代码这样来调用这个结构体:

struct Point oPoint1={100,100,0};
struct Point oPoint2;

现在,我们利用 typedef 定义这个结构体,如下面的代码所示:

typedef struct tagPoint
{
    double x;
    double y;
    double z;
} Point;

1、定义了一个新的结构类型

2、使用 typedef 为这个新的结构起了一个别名,叫 Point,即:

所以,现在你就可以像 int 和 double 那样直接使用 Point 定义变量。

Point  pt1;

也可以这样使用

	先定义结构体
    struct student
	{
		double height;//double类型  体重
		char * name;//字符串 名字
	};

	//再给student结构体起一个简称stu

	typedef struct student stu;
    
    //申明一个stu结构体类型变量stu1
    stu stu1

结构体指针(先理解一下指针的意义)

指针的意义:https://www.cnblogs.com/douzi2/p/4934130.html

使用结构指针对结构成员的访问, 与结构变量对结构成员的访问在表达方式 上有所不同

结构指针名->结构成员

定义结构体指针

//首先定义一个teachar结构体,简称tch,

    typedef struct teachar
    {
        int age;
        double height;//double类型  体重
        char * name;//字符串 名字
    }tch;

现在相当于有一个stu的数据类型了,和 int 一样

我可以定义一个结构体变量和int类型变量

tch tch1;

int a;

那我也可以定义一个int类型指针和tch类型的指针啊

int *b;

tch *tch2;

把tch2指向tch1的首地址

tch2=&tch1

tch2->age=25;

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值