剑指offer(一) 编程语言 sizeof typedef 赋值运算符函数 总结
来源:互联网 发布:淘宝买家达到钻号 编辑:程序博客网 时间:2024/06/11 15:41
以前的很多笔记都是通过私人笔记保存了,面试的时候问到我的博客或者GitHub,很尴尬竟然没有写,所以打算把找工作的阅读的一些经验分享出来,内容不是特别详细的教程方式,主要是总结性质,希望大家也可以一起进步。
编程语言c++
1、sizeof (操作符、内存对齐、实例、虚函数)
2、typedef3、赋值运算符函数
1、sizeof:查询对象或类型的大小,在需要知道对象的实际大小时使用。是操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。
sizeof的主要问题:内存对齐、虚指针内存布局
sizeof的主要对象:
- 基本数据类型的sizeof
- 结构体的sizeof
- 联合体的sizeof
- 指针的sizeof
- 函数的sizeof (结果是函数返回值类型的大小)
- 类的sizeof
6类的sizeof相对复杂,因为涉及存在虚指针内存布局的情况。类的sizeof可以细分为3类:
- 只有数据成员的对象
- 没有虚函数的对象(实例 和 类体 )
- 拥有虚函数的类对象
情况1和基本数据类型的sizeof一样处理。
情况2注意,实例对于sizeof的影响。在Student1中,union AA被实例化了。而在Student2中,union AA 并没有实例化。
基于typedef 的Student3 网上讨论的挺多,但是我个人认为并不影响sizeof。
情况3针对拥有虚函数的类对象。引用一个大神对虚函数机制的介绍 (主要为了实现运行时的动态绑定,多态)
http://blog.csdn.net/hackbuteer1/article/details/7883531
这里是虚函数sizeof的一个例子(vs2013,不同的编译器可能有区别,和实现有关)
内存布局:
很明显可以看到这里的a是4字节, 但是b是16字节。 b=a+4(vptr 对应B本身的虚拟表)+4(???) ,vs2013的内存布局里面这4个字节并没有体现出来。
博客上的解释是:对于虚继承,类B因为有自己的虚函数,所以它本身有一个虚指针,指向自己的虚表。另外,类B虚继承类A时,首先要通过加入一个虚指针来指向父类A,然后还要包含父类A的所有内容。因此是4(char[3] 对齐)+4(a)+8=16。我个人认为还是取决于实现机制,g++的sizeof就完全不考虑虚函数表所占的内存。
2、typedef:用来声明一个别名,typedef后面的语法,是一个声明。
(1)、区分#define
(2)、type (*)(….)函数指针 和type (*)[]数组指针
3、赋值运算符函数
明确几个概念
(1)、浅拷贝、深拷贝
——浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间;
——深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。
一个典型的例子就是函数传递数组。数组退化为指针传递,实际上就是浅拷贝
void f1(int a[]){ int i=0; int len=6; for(;i<len;i++){ a[i]=i+10; }void main(){ int a[5]={1,2,3,4,5}; f1(a);}
(2)、构造函数、拷贝构造函数、赋值运算符函数
- 构造函数: a("123")
- 拷贝构造函数: String d = a; 等价于 String d(a);
- 赋值运算符: c = a;
阅读全文
0 0
- 剑指offer(一) 编程语言 sizeof typedef 赋值运算符函数 总结
- 剑指offer面试题(一):赋值运算符函数
- 剑指offer:面试题一:赋值运算符函数
- 剑指offer,面试题一:赋值运算符函数
- 《剑指Offer》面试题一之赋值运算符函数
- 【剑指offer】赋值运算符函数_01
- 【剑指Offer】赋值运算符函数
- 【剑指offer】1.赋值运算符函数
- 剑指offer - 赋值运算符函数
- 《剑指offer》01 赋值运算符函数
- 剑指offer--赋值运算符函数
- 剑指offer-01:赋值运算符函数
- 剑指Offer----面试题一:为类添加赋值运算符函数
- 剑指offer 赋值运算符
- 剑指Offer算法实现之一:赋值运算符函数
- 剑指Offer:面试题01---赋值运算符函数
- 《剑指Offer》面试题1:赋值运算符函数
- 剑指Offer系列---(3)赋值运算符函数
- 把JfreeChart集成在Hibernate+SpringMVC框架项目中(附源码)
- ARKit 开发系列(1)----Xcode开发ARKit应用
- 电影购票APP实现(3)-Android客户端
- Redis 持久化
- 2、如何给未知宽高的图片垂直居中?有几种办法?
- 剑指offer(一) 编程语言 sizeof typedef 赋值运算符函数 总结
- phpMyadmin 配置
- 求最长公共子序列
- hash算法 (hashmap 实现原理)
- 【Netty入门】TCP 粘包/拆包问题产生原因
- EasyML 快速入门
- 读书笔记之Builder模式
- canvas实现鼠标划线
- jQuery Mobile 滚屏事件