指针与内存空间
1.程序运行时存储空间的布局?各存放什么?
代码段——存放程序执行代码
静态数据区
数据段——已初始化全局变量、静态变量、常量
BSS段——未初始化的全局变量
动态数据区
堆区:malloc、new动态分配的内存
栈区:编译器自动分配,参数、局部变量(通过栈顶指针+偏移访问)
2.你对指针是怎么理解的?
指针就是指向地址的变量,指针所在内存地址里存的值xx就是它所指向内存区域的起始地址;
指针在32位机器中占4字节空间
数组名的本质就是指针
优点:提高效率,动态内存分配 缺点:安全性可读性
3.C++中指针和引用有什么区别?
引用的本质就是变量的一个别名,声明时必须初始化且不能为空
引用不用分配内存区域,i++和指针有区别,ptr+1表示指向的地址向后挪一个单位(如int型就是4字节)
作为参数传递时,都对实参有影响
4.malloc/free new/delete 的区别?
malloc在堆区;new在专门的自由存储区
返回值——new是对象类型的指针;malloc是void* 要显式转换
是否要指定内存大小——malloc要