求助求助!!!各位大神帮帮小女子啊!!!

IVY_AI3 2012-11-17 10:40:40
我刚上大二,刚接触C++,我们用的课本是清华的教材《C++程序语言设计 第四版》,现在上到第六章“数组、指针与字符串”,那个从动态数组开始以后的内容真心看不懂啊!!我想问的是,为啥用new的时候,还是要输入一个确定的值呢,那不就是固定了数组长度了吗,谁能给我讲讲动态创建数组到底是什么含义啊,vector又到底是怎么用啊 我真的不行了。。。。。。思维完全混乱。。。。
...全文
173 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky88866 2012-11-17
  • 打赏
  • 举报
回复
指针是什么?假设你是32位机器,那就对应着32位的地址总线,总计可以表达2^32种状态,也就是4G空间,假设你的内存条是2G的,内核会确保你的不同程序所使用的虚拟4G内存空间映射到2G空间中的不同位置. 数组是什么,你可以理解为我从那虚拟的4G空间中分配一块内存供你使用,你可以在程序开始运行时分配,也就是全局数组?也可以在某个函数中分配,就是局部数组,局部数组会在函数作用域完成之后销毁,不应该说是销毁,只不过是简单的堆栈指针偏移 动态创建内存是什么?有时候你不想程序一开始就分配那么内存,而是想在运行时候,如点击某个按钮是分配内存,c++中使用new/delete分配/释放内存,与c中malloc/free不同的是如果new的是对象,会调用其构造函数初始化,如果是普通的内存申请,你完全可以 int* p=new int[10]; free(p);//这种做法不建议,还是使用delete[] p;为什么加上[],是为了和int* p=new int;delete p;区别开来,一个是单一的int,一个是10个int. Vector是什么?就是你不想手动的去管理释放内存,把这个任务去交给vector,你只管插入数据,删除数据,内存的操作全部由vector内部完成
IVY_AI3 2012-11-17
  • 打赏
  • 举报
回复
引用 9 楼 sj720618 的回复:
引用 8 楼 IVY_AI3 的回复:引用 4 楼 ri_aje 的回复:对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,……
真心受不了了。。。。。。。我学的就一团糟。。。。难道要从指针学起。。。。
sj720618 2012-11-17
  • 打赏
  • 举报
回复
引用 8 楼 IVY_AI3 的回复:
引用 4 楼 ri_aje 的回复:对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。 完了……
你编译时写到代码里的数组长度是固定的,比如直接写长度,或者是编译期可以确定下来的常量,这时就可以用int arr[100];这样的语句声明数组. 但是很多时候数组的长度在运行之前是无法知道的,比如用一个用户输入的数字做数组,这时候要用new了
IVY_AI3 2012-11-17
  • 打赏
  • 举报
回复
引用 4 楼 ri_aje 的回复:
对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。
完了,我觉得我都没救了。。。。
转角天边 2012-11-17
  • 打赏
  • 举报
回复
引用 3 楼 IVY_AI3 的回复:
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。
new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针 malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
ri_aje 2012-11-17
  • 打赏
  • 举报
回复
引用 3 楼 IVY_AI3 的回复:
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。
你就想像成 new = malloc + ctor-call 就行了。用 malloc 也行,只不过还得自己调用构造函数。
IVY_AI3 2012-11-17
  • 打赏
  • 举报
回复
引用 2 楼 dragoo1 的回复:
哎,指针是c语言的,跑c++里面学指针还真是。。。 int a[3];这是静态数组 int m=3; int * p = new int[m];m值是可以改变的,这是动态数组 建议楼主先学指针,再学动态数组,再学vector
这个,我的指针的确学的不咋地。。。。那我该肿么办 学指针时用的书提供的内容太少了啊 讲的很简单。。。有木有推荐的书让我看看。。。
ri_aje 2012-11-17
  • 打赏
  • 举报
回复
对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。
IVY_AI3 2012-11-17
  • 打赏
  • 举报
回复
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。
dragoo1 2012-11-17
  • 打赏
  • 举报
回复
哎,指针是c语言的,跑c++里面学指针还真是。。。 int a[3];这是静态数组 int m=3; int * p = new int[m];m值是可以改变的,这是动态数组 建议楼主先学指针,再学动态数组,再学vector
zjs100901 2012-11-17
  • 打赏
  • 举报
回复
int i = 3; int a[i];这是不可以的 int * p = new int[i];这是可以的

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧