
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习软件编程开发技术,而今天我们就通过案例分析来了解一下,C语言编程结构体的概念与应用方法。
我们发现程序确实通过250次movsl复制了一个"数组"。其原因是:结构体是可以复制的,结构体又可以包括任意类型的子元素,数组也行,所以"数组"也被复制了。
那为什么纯粹的数组就不能复制呢?
我们可以这样去理解:一个变量能被复制的必要条件是我们知道它的大小。结构体做为自定义类型,在编译的时候编译器必然存储了它的子元素类型、个数等相关信息,结构体的大小也就知道了;而数组一般只在乎它的类型和起始地址,元素个数总是被忽视的(例如:voidfunc(chars[])可接受任何长度的字符数组做参数),而且元素个数也没有被当做数组的一部分存入内存,所以数组的复制是不好实现的。
结构体中的数组和指针
对于结构体中的指针,如果把结构体a赋值给结构体b,那么对于指针来说,只是简单的拷贝指针地址,并不会重新分配一个内存空间,以及新的指针地址。也就是说结构体a和结构体b中的指针,共享空间。
对于结构体中的数组,则恰恰相反,他们并不共享空间,而是重新分配一个内存空间,用以保存数组内容。
我们可以这样去理解:一个变量能被复制的必要条件是我们知道它的大小。因此,在计算结构体大小时,结构体中的指针只占有了四个字节,而数组则占用数组本身的大小,因此,指针只是简单的拷贝指针地址,而数组却可以重新分配一个内存空间来保存数组内容。
小结
如果给结构体下一个实在点的定义话,那就是:有格式的字节数组。有了结构体后C语言的变量类型就丰富多了,但是同时也要注意:
超过4字节的结构体不宜做参数(参数传递浪费时间、空间),换做指针更好。
超过4字节的结构体不宜做返回值类型
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。