C语言之动态数组应用

对于刚接触C语言编程的人,很多时候会遇到这种情况——“当让我们处理一个这样的问题,让我们存储或者使用一个大小会随着使用者的使用情况而改变”,这时很多人就开始抓头了,不知道如何下手。今天我个人总结了一些有关这方面的解决方案,希望大家能一起完善。

动态数组:

首先,我们一起来看看一组代码:

 #define _CRT_SECURE_NO_DEPRECATE
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 void create(){
 5     int n, i;
 6     int *arr;
 7     scanf("%d",&n);
 8     arr = (int*)malloc(sizeof(int)*n);
 9     for (i = 0; i < n; i++)
10         arr[i] = i;
11     for (i = 0; i < n; i++)
12         printf("%d\t",arr[i]);
13 free(arr); 14 } 15 16 int main(){ 17 create(); 18 return 0; 19 }

从上面的代码可以看出,对于数组arr[],其使用大小是有我们个人输入的,而不是一开始就给定了的,所以很大程度上解决了给定大小更改大小的麻烦。
而这里它使用的就是C语言中最常使用的malloc函数,为arr开辟空间,但是开辟了空间一定要记着给free()了,不然你的内存就会因为这些东西给占满。
其次,二维动态数组:

void create(){
int n=3, m=4;
int** a;
a = (int**)malloc(sizeof(int*)*n);//创建一个指针数组,把指针数组的地址赋值给a
for (int i = 0; i < n; i++)
a[i] = (int*)malloc(sizeof(int)*m);//给第二维分配空间

for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++)
a[i][j] = i + j;
}

for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
int main(){
create();

return 0;
}

简单的说就是按照二维数组的思想,把二维数组看成一个拥有多个数据的一维数组,从而模仿一维数组的方式进行建立即可,这里采用指针的指针的方式来进行进一步的创建。

接下来便是对于,当我们首先建立的数组大小满了的时候的这种情况的解决方案。请看代码:

if (i == n) {

    //判断是否数组已经满了,如果满了,进行如下操作
    // 第一步 申请一块更大的内存空间 新空间是旧空间的两倍
    int* newSpace = (int*)malloc(sizeof(int) * n) * 2);
    // 第二步 拷贝数据到新建的空间
    memcpy(newSpace, arr, n* sizeof(int));
    //第三步 释放旧空间的内存
    free(arr);
  }

这时就可以很方便的使用数组了,不用担心在使用过程中出现数组溢出的情况了,只需要保证内存足够就好了。

猜你喜欢

转载自www.cnblogs.com/Justina/p/11432616.html