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、减少内存碎片)
《完》
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 main 函数
- 注册表的组织结构
- Ruby on Rails所构建的应用程序基本目录结构总结
- Lua和C语言的交互详解
- SQLSERVER的非聚集索引结构深度理解
- 调整SQLServer2000运行中数据库结构
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- C#中结构(struct)的部分初始化和完全初始化实例分析
- C#中类与结构的区别实例分析
- C#枚举类型与结构类型实例解析
- C# Pointer指针应用实例简述
- javascript实现表现、结构、行为分离的选项卡效果!
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解