1.使用指针~~ 2.自己申请内存 例如:如第一块的代码,若想实现一个动态数组,必须写成二的部分,用完之后必须给free(); 必须加上头文件#include<malloc.h> 常用格式:
{
int n;
int *a;
scanf("%d",&n);
a = (int *)malloc(n*sizeof(int ))
}
举个例子:
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int shzu[n];
... ...
return 0;
}
#include<stdio.h>
#include<malloc.h>
int main(){
int n;
scanf("%d",&n);
int *shzu = (int *)malloc(sizeof(int)*n);
... ...
free(shuzu);
return 0;
}
1.malloc函数的参数为所需申请内存的大小:以字节为单位。 2.malloc函数返回一个void*类型的地址,必须通过强制类型转换,才能赋值给特定的指针变量 int *pint = (int *)malloc(sizeof(int ) *100): 3.分配的内存不在使用的时候一定要释放: free(pint);
那么在c++中也有相应的动态数组的函数定义。 所用到的函数是 new ,delete 所在头文件:iostream 使用格式:
{
int n;
int *a;
cin>>n;
a = new int[n];//
... ...
delete a;
}
特点: 1.new 是 c++ 关键字的一部分; 2. new以具体类型为单位进行内存分配; 3. new在申请单个类型变量是时可以进行初始化;而malloc不可以; 语法: 1.变量申请:
Type * pointer = new Type[N];
//....
delete pointer;
表达式用于分配内存以包含一个类型类型的单个元素。 2.数组申请:
Type* pointer = new Type[N];
//...
delete[] pointer;
表达用于分配类型类型的元素的块(数组),其中N是表示这些元素的量的整数值。
Example:
int * foo;
foo = new int [5];
在这种情况下,系统为int类型的五个元素动态分配空间,并返回指向序列的第一个元素的指针,该指针被分配给foo,因此,foo现在指向一个有效的内存块,其中包含五个int 类型元素的空间。 这里,foo是一个指针,因此,foo指向的第一个元素可以用表达式foo[0];或者*foo来访问。可以用foo[1]或者 *(foo+1)访问第二个元素,依次类推。 一个简单的例子可以帮助大家理解这个,可以自己运行试一试。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int *p = new int ;
*p = 5;
*p = *p +10;
cout<<p<<endl;
cout<<*p<<endl;
delete p;
p = new int[10];
for(int i=0;i<10;i++){
p[i] = i+1;
printf("p[%d]=%d\n",i,p[i]);
}
delete[] p;
return 0;
}