C/C++中的动态数组

关于动态数组的作用,不言而喻,有了动态数组,我们将不再担心因为  数组大小而带来的而一些困扰。

一.下面先说一下c语言中的动态数组

1.1首先我们认识几个函数:

<caption> 关于动态内存分配的一些函数 </caption>
函数名 函数原型 功能 返回值
calloc void *calloc(unsigned n,unsign size) 分配n个数据项的内存连续空间, 每个数据项的大小为size 分配内存单元的起始地址,如不成功,返回0
free void *free(void *p); 释放p所指的内存区
mallloc void *malloc(unsigned size);
 
分配size字节的存储区间 所分配的内存起始区起始地址,如内存不够,返回0
realloc void  *realloc(void *p,unsigned size); 将p所指出的已分配内存区的大小改为size,size可以比原来分配的空间大或小 返回指向该内存区的指针

 calloc、malloc、realloc的区别可以点击查看

1.2下面来看个例子:

1.2.1用动态数组创建一维数组:

#include<stdio.h>
#include<stdlib.h>
int main() {

	//一维数组的建立
	int *array1;
	int n1;
	printf("你要建立的一维数组的大小:");
	scanf("%d", &n1);
	array1 = (int *)malloc(n1*sizeof(int));

	int i;
	for (i = 0; i < n1; i++)
		scanf("%d", array1 + i);
	for (i = 0; i < n1; i++)
		printf("%d ", *(array1 + i));
	free(array1);

	return 0;
}

运行结果如下 :

1.2.2创建二维数组

#include<stdio.h>
#include<stdlib.h>
int main() {
	int **array2;
	int n1, n2;
	printf("输入二维数组的维数:");
	scanf("%d %d", &n1, &n2);
	
	//申请空间
	//第一维
	array2 = (int **)malloc(n1 * sizeof(int)); 
    /*第二维的申请没有第一维那么直接,可以理解,第一维存储的就是n1个指向二维的指针*/
	int i,j;
	for (i = 0; i < n1; i++) {
		array2[i] = (int*)malloc(n2 * sizeof(int));
	}

	for (i = 0; i < n1; i++) {
		for (j = 0; j < n2; j++) {
			array2[i][j] = i + 2 * j;  //直接赋值吧
			printf("%d ", *(*(array2 + i) + j));
		}
		printf("\n");
	}
	for (i = 0; i < n1; i++)
		free(*(array2 + i));  //free(array2[i])
	free(array2);
	return 0;
}

运行结果如下:

     

1.2.3扩展动态数组

 这里主要用到realloc()这个函数。

#include<stdio.h>
#include<stdlib.h>
int main() {
	int*n, *p;
	int i, n1, n2;
	printf("请输入所要创建的动态数组的长度:");
	scanf("%d", &n1);
	//下面语句也可以用n=(int *)malloc(n1*sizeof(int));
	n = (int*)calloc(n1, sizeof(int));
	for (i = 0; i < n1; i++) {
		n[i] = i + 1;
		printf("%d\t", n[i]);
	}
	printf("\n");

	printf("请输入所要扩展的动态数组的长度:");
	scanf("%d", &n2);
	p = (int*)realloc(n, (n2) * sizeof(int));//动态扩充数组
	for (i = 0; i < n1; i++)
		printf("%d\t", n[i]);
	for (i = n1; i < n2; i++)
	{
		p[i] = i + 1;
		printf("%d\t", p[i]);
	}
	printf("\n");
	free(p);
	return 0;
}

运行结果: 

1.2.4缩小动态数组

#include<stdio.h>
#include<stdlib.h>
int main() {
	int*n, *p;
	int i, n1, n2;
	printf("请输入所要创建的动态数组的长度:");
	scanf("%d", &n1);
	n = (int*)calloc(n1, sizeof(int));
	for (i = 0; i < n1; i++){
		n[i] = i + 1;
		printf("%d\t", n[i]);
	}
	printf("\n请输入所要缩小的动态数组的长度:");
	scanf("%d", &n2);
	p = (int*)realloc(n, (n2) * sizeof(int));
	for (i = 0; i < n2; i++)
		printf("%d\t", p[i]);

	printf("\n");
	free(p);
	return 0;
}

运行结果:

     

二、C++中的动态数组

具体可参考C++primer第12章,这里只说一下它的简单用处:

主要是new 和delete,他们代替了传统的的c语言中的malloc等和free。

#include <iostream>

int main()
{
	using namespace std;
	int *a;
	int n;
	cout << "请输入你要申请的数组的长度:";
	cin >> n;
	a = new int[n];
	for (int i = 0; i < n; i++) {
		a[i] = i;
		cout << a[i]<<"  ";
	}
	cout << "\n";
	delete a;
	system("pause");
	return 0;
}

当然,c和C++并没有绝对的界限。

希望大家喜欢。

  

全部评论

相关推荐

2025-12-01 16:35
内蒙古工业大学 Java
上个月实习了7天被开,哎想起来真窝囊,领导叫我去会议室,问我技术栈,当时紧张的,问我有没有做项目啥的,我说没有,有练习,其实我也是做过两个项目的但是,当时紧张的说不出来,就说会java,springboot,我没好好看系统,就说系统是增删改查,他让我回去再看,说熟悉完再看走开发路线还是实施什么的路线,3天后问我,我说这是一个审批系统,其实也不是,是一个检测系统,主要流程是委托&nbsp;&nbsp;受理然后&nbsp;样品管理&nbsp;报告管理&nbsp;审核啥的&nbsp;。然后问我你觉得系统的好处是啥,忘了当时咋说的了,让我回去再熟悉一下。第二周也没安排任务,没有配电脑,然后周二,我当时企业微信没看,和朋友聊天呢,然后他发了任务一个小时之后我才看到,然后我回复的时候是3点半,未读过了一会儿hr给我叫到小黑屋,说觉得不合适,然后让我填离职表。后来想想一开始要是自信点是不是就能配电脑然后开发了。租的房子转租也没租出去,该交房租了,好在当时是月付,没有选择季付,不然哭都没地方。又回到基地了,好久没学了,有时候我也在想为啥我这么消极,这么不自信,哎,面试什么的也挂了好多了。昨天我妈和我打电话说他年前体检就检查出来脸上骨头里面有囊肿,手术很复杂,说要经过鼻子,医生说手术之后容易感染,他老是头疼,我现在在实训基地,离家好远,我爸也有事,我妈说要不拖到我姐放假回去得1月。不知不觉这么多字了,现在是12.1下午4.20,刚面试完胜软,感觉躺平已经成了口头禅了,想离家远一点,但是每个月还是会问家里要生活费,教室和宿舍还是那样,但是不知为何,我总有一种物是人非的感觉,上厕所和接水要去四楼,我们之前的教室就在四楼,路过教室的时候总有一种恍惚的感觉。网上说高敏感是种天赋,我却感觉老是很痛苦,总是能听出一些弦外之音,可能人家也不是那个意思。我也不知道要表达啥了在都是大佬都群里面,默默的看着他们的发言,遇到问题找大佬解决,但是没有利益交换,大佬也会觉得厌烦的。焦虑什么的是能力跟不上欲望,每天一边郁郁寡欢一遍暴饮暴食,总是希望别人能关心一下自己,但自己也不常关心别人。之前一个大佬给我内推,但是我力扣也没刷都不好意思面试,发了两次面试通知我也没面。就到这里吧,毕业设计题目出来了,先学一下黑马的springboot3vue3全栈吧。
_mos_:别的不多说 就你上班聊天摸鱼整整一个小时不看信息我都觉得很抽象了别扯什么自己这那的 我感觉领导确实已经给你很多时间和空间了 自己还是想想有没有真的用心去做 不是什么东西都要别人推着你去干的 总得学会主动一点吧 最后中肯地说一句 卷不了还是别走互联网这条路了 不好意思说话有些直白但希望你可以明白我的意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务