C语言 创建动态数组的两种方法

创建动态数组有两种方法

因本人才疏学浅,见识浅薄,有不当之处望指正,谢谢!

  • 声明指针,调用malloc(), 将其返回值赋给指针,使用指针访问数组的元素。而且这个指针可以是静态或者自动的
  • 声明变长数组(VLA),c99新特性。用变量表达式表示数组的维度。
    两种方法在功能上相似。比如,两种都可以在运行时确定大小的数组:
int a()
{
	int n;
	int * pi;
	scanf("%d", &n);
	pi = (int *) malloc (n * sizeof(int));
	int ar[n];
	pi[2] = ar[2] = -5;
	...
}

变长数组(VLA)和malloc()区别:

  • 变长数组是自动存储类型,所以程序执行完a()函数,变长数组占用的内存空间会自动释放。
  • malloc()创建的数组不局限在一个函数访问。比如:被调函数创建数组并返回指针,供主调函数访问,然后主调函数在结尾调用free()函数释放被调函数分配的内存
  • 就多维数组而言,使用变长数组更方便。用malloc()创建二维数组,语法繁琐。如果编译器不支持变长数组特性(VC++6.0就不支持),就只能固定二维数组的维度
    如下:
int n = 5;
int m = 6;
int ar[n][m];		// n x m 的变长数组(VLA)
int (* p1) [6];		// C99以前的写法
int (* p2)[m];		// 要求支持变长数组
p1 = (int (*)[6]) malloc(n * 6 * sizeof(int));	// n x 6 数组
p2 = (int (*)[m]) malloc(n * m * sizeof(int));	// n x m 数组(要求支持变长数组)
ar[1][2] = p1[1][2] = 1;

那使用动态数组有什么好处,使用动态数组给程序带来了更多灵活性。如果你已经知道,大多数程序所用的数组都不会超过100个元素,但是有时需要100000个元素。要是按照平时,你不得不为这种情况声明一个内含100000个元素。这样子基本是在浪费内存。如果需要100002个,这个程序就不能用了。在这种情况,可以使用一个动态数组调整程序以适应不同的情况。

关于malloc()函数:malloc()

你可能感兴趣的:(C语言)