您的位置:首页 > 编程语言 > C语言/C++

C语言结构体里的成员数组和指针

2016-09-11 12:31 447 查看
本文通过阅读陈皓的文章总结 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语言 结构 指针