如何实现动态数组

时间:2022-07-24
本文章向大家介绍如何实现动态数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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]=%dn",i,p[i]);
		
		
	}
	delete[] p;
	return 0;
}