C语言结构体里的成员数组和指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体里的成员数组和指针相关的知识,希望对你有一定的参考价值。
本文通过阅读陈皓的文章总结 http://coolshell.cn/articles/11377.html
1、所谓变量只是内存中抽象的一个名字,在静态编译时都会转换成相应的内存地址,我们的变量都会在编译的时候被编译器放入内存区中
2、当访问结构体成员变量的时候,是通过偏移量来寻找的
不管结构体的实例是什么,访问成员变量都是加成员的偏移量
3、指针和数组
数组:访问成员数组名得到的是数组的相对地址
指针:访问成员指针得到的是相对地址的内容
对于char s[0]来说,汇编代码用了lea指令,lea 0x04(%rax), %rdx
对于char*s来说,汇编代码用了mov指令,mov 0x04(%rax), %rdx
lea全称load effective address,是把地址放进去,而mov则是把地址里的内容放进去。
数组的原地就是内容,而指针的那里保存的是内容的地址。
4、零长度数组(柔性数组)
0长度的数组在ISO C和C++的规格说明书中是不允许的。
可以给结构体分配一段连续的空间(1、方便释放 2、减少内存碎片)
《完》
本文出自 “零蛋蛋” 博客,谢绝转载!
以上是关于C语言结构体里的成员数组和指针的主要内容,如果未能解决你的问题,请参考以下文章