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);
  }

這時就可以很方便的使用數組了,不用擔心在使用過程中出現數組溢出的情況了,只需要保證內存足夠就好了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM