C/C++实现动态数组
来源:互联网 发布:永锡尔类。其是之谓乎 编辑:程序博客网 时间:2024/06/05 18:06
C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量。一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后不能改变,称为静态数组。静态数组存放在:全局变量区、栈。
动态数组,可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。步骤如下:
1、malloc/new分配堆内存;注意堆内存的释放;
2、通过指针偏移、下标进行赋值。
首先看C如何实现动态数组。代码如下:
一、使用[]运算符
#include <stdio.h>#include <stdlib.h>int main(){ int arrLen; // 数组长度 int *array; // 数组指针 int i; // 数组下标 printf("输入数组长度:"); scanf("%d", &arrLen); // 动态分配内存空间,如果失败就退出程序 array = (int*)malloc( arrLen*sizeof(int) ); if(!array){ printf("创建数组失败!\n"); exit(1); } // 向内存中写入数据 for(i=0; i<arrLen; i++){ array[i] = i+1; } // 循环输出数组元素 for(i=0; i<arrLen; i++){ printf("%d ", array[i]); } printf("\n"); free(array); system("pause"); return 0;}运行结果:
输入数组长度:10
1 2 3 4 5 6 7 8 9 10
请按任意键继续. . .
二、不使用[]运算符
#include <stdio.h>#include <stdlib.h>int main(){ int arrLen; // 数组长度 int *array; // 数组指针 int *arrayCopy; // 数组指针副本 int i; // 数组下标 printf("输入数组长度:"); scanf("%d", &arrLen); // 动态分配内存空间,如果失败就退出程序 arrayCopy = array = (int*)malloc( arrLen*sizeof(int) ); if(!array){ printf("创建数组失败!\n"); exit(1); } // 向内存中写入数据 for(i=0; i<arrLen; i++){ *arrayCopy++ = i+1; } // 循环输出数组元素 arrayCopy = array; for(i=0; i<arrLen; i++){ printf("%d ", *arrayCopy++); } printf("\n"); free(array); system("pause"); return 0;}可以发现,我们必须另外定义两个指针变量
1、arrayCopy,用来指向具体的数组元素。
2、array:用于指向数组首地址。在数组赋值完成后,要用array将 arrayCopy 重置到数组首地址,以便后面循环输出。
这里注意:free() 函数必须释放整块内存,不能只释放一部分,或者释放不存在的内存空间,否则程序会出错。
C++实现动态数组。
#include<iostream>using namespace std;int main(void){ int n=20; int *p=new int[n]; for(int i=0;i<n;i++) { cout<<&p[i]<<endl; p[i] = i; } for(int i= 0;i<n;i++) { cout<<p[i]<<endl; } delete [] p; system("pause");return 0;}
注意:
最后重要的是别忘了将动态创造的空间释放掉,语句是:delete [] p; ‘[ ]’表明该指针是指向的自由存储区的数组,而非单个对象。如果遗漏了空方括号,编译器将无法发现这个错误,将导致程序在运行时出错。
0 0
- C实现动态数组
- 动态数组C语言实现
- C语言实现动态数组
- 动态数组的 C 实现
- C/C++实现动态数组
- C语言实现动态数组
- c语言实现动态数组
- 链表实现动态数组C源代码
- C/C++语言实现动态数组
- C/C++语言实现动态数组
- C语言动态数组的完整实现
- C语言实现 vector( 动态数组)。
- C语言堆栈实现( 动态数组 )
- C语言队列实现( 动态数组 )
- C语言实现 vector( 动态数组)
- C语言动态数组的完整实现
- C语言 -----动态数组算法实现
- C语言中动态数组的实现
- 刘慈欣
- 判断对象的等同性isEqual和hash
- block循环引用的解决办法
- 有符号数和无符号数
- 伙伴系统和slab机制
- C/C++实现动态数组
- 实现横向listview(HorizontalListview)
- String和StringBuffer
- 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
- Swap Nodes in Pairs
- ecshop编辑器fckeditor换百度ueditor编辑器教程
- 多维尺度分析 MDS
- UIResponder - 2
- Linux-mysql忘记root密码