关于C++中的一些疑问.高手帮忙,跟我一样的学习了哦

来源:百度知道 编辑:UC知道 时间:2024/05/18 14:49:32
疑问1: (比如向量)下标操作与指针操作有什么不同??下标的本质是不是指针的加减运算呢?

疑问2: 动态内存(分配)是不是就是指的是虚拟内存(分配)
动态内存分配为什么就要定义一个指针,他不能用变量吗(这个只要了解就好了,因为是我自己没看过相关的)??

疑问3: 对C的回忆,我都忘了,为什么C中申请的空间什么的好像都要free掉,大一时也没搞清楚,浅浅的想想也简单就是怕内存泄露什么的,
最主要的是C++中为什么定义了变量什么的用完还不用”还钱”??

看到的朋友希望能给点帮助,能说一条是一条,也不是为了分数,帮忙一下了,谢谢了.

疑问1: 下标操作是用指针加减实现的,不过指针操作更灵活,如果写得好,用指针效率更高。

疑问2: 动态内存分配不是虚拟内存分配,虚拟内存分配是操作系统低层功能,效率要求高,所以虚拟内存都是大块大块进行的,比如一次分配4M或者更多,而动态内存分配需要分配更小的块,比如几个字节。通常动态内存分配是先从操作系统分配一个大块虚拟内存,然后再大块内存内进行动态内存分配。

在windows平台下,动态内存分配也是操作系统提供的功能,但和虚拟内存分配不同。

动态内存分配需要用指针,是因为需要接收长度不一样的内存块,而变量(包括类实例)都是定长的,无法适应不同长度的空间,无类型指针是一个地址,和长度无关,所以适合接收不同长度内存。

疑问3: C++也要释放的内存,new分配的必须用delete删除。C/C++的自动变量和静态全局变量都不需要释放,是因为他们有确定的生存期,系统知道何时释放他们,比如局部自动变量,在函数返回的时候就失效了,系统就在变量失效的时候自动释放他们。而动态内存分配不同,比如malloc、new等,他们失效的时刻是任意的,系统无法自动释放他们,所以必须要程序释放他们,所以不论C还是C++,都要程序释放。