11 个解决方案
#1
int i = 3;
int a[i];这是不可以的
int * p = new int[i];这是可以的
int a[i];这是不可以的
int * p = new int[i];这是可以的
#2
哎,指针是c语言的,跑c++里面学指针还真是。。。
int a[3];这是静态数组
int m=3;
int * p = new int[m];m值是可以改变的,这是动态数组
建议楼主先学指针,再学动态数组,再学vector
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
这个,我的指针的确学的不咋地。。。。那我该肿么办 学指针时用的书提供的内容太少了啊 讲的很简单。。。有木有推荐的书让我看看。。。
#6
你就想像成 new = malloc + ctor-call 就行了。用 malloc 也行,只不过还得自己调用构造函数。
#7
new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
#8
完了,我觉得我都没救了。。。。
#9
你编译时写到代码里的数组长度是固定的,比如直接写长度,或者是编译期可以确定下来的常量,这时就可以用int arr[100];这样的语句声明数组.
但是很多时候数组的长度在运行之前是无法知道的,比如用一个用户输入的数字做数组,这时候要用new了
#10
真心受不了了。。。。。。。我学的就一团糟。。。。难道要从指针学起。。。。
#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内部完成
数组是什么,你可以理解为我从那虚拟的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];这是可以的
int a[i];这是不可以的
int * p = new int[i];这是可以的
#2
哎,指针是c语言的,跑c++里面学指针还真是。。。
int a[3];这是静态数组
int m=3;
int * p = new int[m];m值是可以改变的,这是动态数组
建议楼主先学指针,再学动态数组,再学vector
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
这个,我的指针的确学的不咋地。。。。那我该肿么办 学指针时用的书提供的内容太少了啊 讲的很简单。。。有木有推荐的书让我看看。。。
#6
你就想像成 new = malloc + ctor-call 就行了。用 malloc 也行,只不过还得自己调用构造函数。
#7
new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
#8
完了,我觉得我都没救了。。。。
#9
你编译时写到代码里的数组长度是固定的,比如直接写长度,或者是编译期可以确定下来的常量,这时就可以用int arr[100];这样的语句声明数组.
但是很多时候数组的长度在运行之前是无法知道的,比如用一个用户输入的数字做数组,这时候要用new了
#10
真心受不了了。。。。。。。我学的就一团糟。。。。难道要从指针学起。。。。
#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内部完成
数组是什么,你可以理解为我从那虚拟的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内部完成