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语言结构体里的成员数组和指针的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么给结构体里的结构体赋值?

c结构体里的数组与指针

C语言结构体里的结构体怎么初始化

如何给结构体里的数组复制啊???

C语言结构体的“继承”

c语言结构体里引用结构体