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

时间:2021-07-08 16:56:23
我刚上大二,刚接触C++, 求助求助!!!各位大神帮帮小女子啊!!!我们用的课本是清华的教材《C++程序语言设计 第四版》,现在上到第六章“数组、指针与字符串”,那个从动态数组开始以后的内容真心看不懂啊!! 求助求助!!!各位大神帮帮小女子啊!!!我想问的是,为啥用new的时候,还是要输入一个确定的值呢,那不就是固定了数组长度了吗,谁能给我讲讲动态创建数组到底是什么含义啊,vector又到底是怎么用啊 我真的不行了。。。。。。思维完全混乱。。。。 求助求助!!!各位大神帮帮小女子啊!!!

11 个解决方案

#1


int i = 3;
int a[i];这是不可以的
int * p = new int[i];这是可以的

#2


哎,指针是c语言的,跑c++里面学指针还真是。。。

int a[3];这是静态数组
int m=3;
int * p = new int[m];m值是可以改变的,这是动态数组

建议楼主先学指针,再学动态数组,再学vector

#3


不明白。。。。 求助求助!!!各位大神帮帮小女子啊!!!在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。

#4


对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。

#5


引用 2 楼 dragoo1 的回复:
哎,指针是c语言的,跑c++里面学指针还真是。。。

int a[3];这是静态数组
int m=3;
int * p = new int[m];m值是可以改变的,这是动态数组

建议楼主先学指针,再学动态数组,再学vector



这个,我的指针的确学的不咋地。。。。那我该肿么办  学指针时用的书提供的内容太少了啊  讲的很简单。。。有木有推荐的书让我看看。。。 求助求助!!!各位大神帮帮小女子啊!!!

#6


引用 3 楼 IVY_AI3 的回复:
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。

你就想像成 new = malloc + ctor-call 就行了。用 malloc 也行,只不过还得自己调用构造函数。

#7


引用 3 楼 IVY_AI3 的回复:
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。


new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

#8


引用 4 楼 ri_aje 的回复:
对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。



完了,我觉得我都没救了。。。。 求助求助!!!各位大神帮帮小女子啊!!!

#9


引用 8 楼 IVY_AI3 的回复:
引用 4 楼 ri_aje 的回复:对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。


完了……

求助求助!!!各位大神帮帮小女子啊!!!
你编译时写到代码里的数组长度是固定的,比如直接写长度,或者是编译期可以确定下来的常量,这时就可以用int arr[100];这样的语句声明数组.
但是很多时候数组的长度在运行之前是无法知道的,比如用一个用户输入的数字做数组,这时候要用new了

#10


引用 9 楼 sj720618 的回复:
引用 8 楼 IVY_AI3 的回复:引用 4 楼 ri_aje 的回复:对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,……



求助求助!!!各位大神帮帮小女子啊!!! 真心受不了了。。。。。。。我学的就一团糟。。。。难道要从指针学起。。。。 求助求助!!!各位大神帮帮小女子啊!!!

#11


指针是什么?假设你是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内部完成

 

#1


int i = 3;
int a[i];这是不可以的
int * p = new int[i];这是可以的

#2


哎,指针是c语言的,跑c++里面学指针还真是。。。

int a[3];这是静态数组
int m=3;
int * p = new int[m];m值是可以改变的,这是动态数组

建议楼主先学指针,再学动态数组,再学vector

#3


不明白。。。。 求助求助!!!各位大神帮帮小女子啊!!!在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。

#4


对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。

#5


引用 2 楼 dragoo1 的回复:
哎,指针是c语言的,跑c++里面学指针还真是。。。

int a[3];这是静态数组
int m=3;
int * p = new int[m];m值是可以改变的,这是动态数组

建议楼主先学指针,再学动态数组,再学vector



这个,我的指针的确学的不咋地。。。。那我该肿么办  学指针时用的书提供的内容太少了啊  讲的很简单。。。有木有推荐的书让我看看。。。 求助求助!!!各位大神帮帮小女子啊!!!

#6


引用 3 楼 IVY_AI3 的回复:
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。

你就想像成 new = malloc + ctor-call 就行了。用 malloc 也行,只不过还得自己调用构造函数。

#7


引用 3 楼 IVY_AI3 的回复:
不明白。。。。在c语言里用malloc函数实现动态分配空间,在c++里用new我不明白啊,怎么可以想建立一个对象就临时分配空间呢。。。


new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

#8


引用 4 楼 ri_aje 的回复:
对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。



完了,我觉得我都没救了。。。。 求助求助!!!各位大神帮帮小女子啊!!!

#9


引用 8 楼 IVY_AI3 的回复:
引用 4 楼 ri_aje 的回复:对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,提供跨平台的统一接口。


完了……

求助求助!!!各位大神帮帮小女子啊!!!
你编译时写到代码里的数组长度是固定的,比如直接写长度,或者是编译期可以确定下来的常量,这时就可以用int arr[100];这样的语句声明数组.
但是很多时候数组的长度在运行之前是无法知道的,比如用一个用户输入的数字做数组,这时候要用new了

#10


引用 9 楼 sj720618 的回复:
引用 8 楼 IVY_AI3 的回复:引用 4 楼 ri_aje 的回复:对于 c++ 这种编译型语言(与之相对的是解释型,比如 python),程序分两个阶段,编译期和运行期。所谓动态数组是指大小在运行期才能确定的数组,c++ 对这样的数据结构是通过 new 支持的。平时说的数组是指编译期大小即可确定的静态数组。std::vector 就是包装了动态数组及其相关的操作,……



求助求助!!!各位大神帮帮小女子啊!!! 真心受不了了。。。。。。。我学的就一团糟。。。。难道要从指针学起。。。。 求助求助!!!各位大神帮帮小女子啊!!!

#11


指针是什么?假设你是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内部完成