首页 > 代码库 > C语言结构体里的成员数组和指针

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语言结构体里的成员数组和指针