内容:回顾C语言结构体的一些见解
突然想到一个有趣的话题,如果把指针比作”倚天剑”,那么结构体算作什么武功呢?
我现在认为,结构体在C语言中的发挥绝对不比指针的作用低多少,甚至不用指针的地方,都有可能用到结构体,一个最最真实的用法—结构体竟然从C语言一下子衍生到了C++语言的思想中,即形成了单独的一个门派—类。
如此想来,结构体的作用不可小觑,可谓是武林正宗!不妨把结构体这一重要的知识点比作”太极拳”吧 吼吼~~
太极?是不是言重了呢?
但是从结构体的基本定义到使用,再到后来的类的定义,以及一系列的使用,绝非简单的一个知识点
一个比较基础的入门就是结构体的定义
以前学C语言的时候,基本没有掌握结构体,老师也只是讲讲结构体是怎么定义的,怎么访问结构体里的成员,用用就拉倒了,其实是错过了学习太极思想最好的时候!
那么为什么要有结构体这一数据类型呢?前面的常规数据类型不是很好用吗,其实不然,结构体放在整个C语言基础语法几乎靠后的地方才开始接触,我想更主要的原因是当初设计这门语言的时候是基础类型已经到了一个瓶颈的地步!
比如表示多个数据信息,如何做到每一个数据块的信息是自己相关联的,那么必须有一种类型能够联系彼此的身份。
举例来说,学生A有id name 学生B也有id name ,访问A时,怎么能够保证访问的数据就是A 所独有,而不是访问B的呢,所以结构体类型出现了。
然后就是结构体类型的定义,一般写法是什么,简单的写法是什么
比如定义如下:
方法一:
Struct student
{
Int id;
Int age;
Char name[10];
};
Int main()
{
Struct studentstu1;
}
方法二:
Typedef struct student
{
Int id;
Int age;
Char name[10];
} s_stu;
有了对结构体的定义,下面是对结构体的初始化,初始化的方法差不多有3种,可以根据自己的编程风格。
假如,太极拳PK倚天剑,会是一种怎样的情况呢?嘿嘿,是不是会很精彩,这个当然不知道,估计金庸老先生不会这样去构思武侠情节。
不过如果在C语言编程中,把指针融合在结构体中去,则会使代码的执行效率大大增加,即指针和结构体的结合
所以当访问一个结构体内的成员时,可以用指针指向该结构体的成员变量,也可以用指针指向该结构体变量,那么直接通过指针来访问结构体。
同时,有了结构体类型的数据,在定义一个变量时,也可以在不同的内存单元中来定义了,比如常用的就是堆内存,使用malloc()和free()
C语言是一个高度结构化的程序语言,它擅长的就是函数接口,所以,在使用结构体类型的数据时,函数接口的定义会逐渐的显现出来它的优越性和地位。
那个画面真的太美,我不敢看~~ (嘎嘎)
在涉及内存的合法权限上,也是做足了文章,前面有一大堆僵尸等着你去解放。稍有不慎,可能会有内存崩溃的地步。这是在说堆内存在使用中的危险。
另外,结构体中还可以套结构体指针,或者数组,或者其他的类型等等,都是极大的丰富了结构体的使用。
此外,通过结构体,还可以知道硬件结构的一些东西,比如结构体的字节对齐是怎么一回事,位段是什么
但了C++语言编程中,结构体仍然被保留了下来,但由于结构体在C++语言中被默认为是共有的,这不太符合C++思想,所以重新有了一个全新的概念,叫类。
关于类的一些认识,在以后的学习中,会有说明。