綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[原創] C 語言完成基本動態陣列處理

[複製連結] 查看: 33895|回覆: 0|好評: 0
跳轉到指定樓層
樓主
jianrupan | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2020-2-20 14:07

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
#include <stdlib.h>
#include <string.h>

typedef struct {
  int size1;         // 陣列使用空間
  int count1;      // count 參數
  char doc[16];        // 文字陣列
} Array1;

typedef struct {
  int size2;        // item 使用空間
  int count2;     // item 陣列數量
  Array1 *item; // 動態陣列指標
} Array2;         // 動態陣列的資料結構
Array2 array2;

// 建立 array2 陣列
void CreateArray2(Array2 *array) {
  array->count2 = 0;        // 初始參數
  array->size2 = 0;        // 初始參數
}

// array1 陣列 加入 array2 陣列
void AddArray2(Array2 *array2, Array1 *array1) {
    int addSize = array1->size1;                // 要加入的空間
    int oriSize = array2->size2;                // 原來的使用空間
    array2->size2 += array1->size1;        // array2 item 記憶空間變大
    int newSize = array2->size2;               // 添加後的使用空間
    // 重新宣告記憶塊
    Array1 *newItems = (Array1 *)malloc(newSize);
    // 搬移 原本 array2 item
    memcpy(newItems, array2->item, oriSize);
    // 釋放 原本 array2 item 記憶體宣告
    free(array2->item);
    // 重新指定 array2 item 記憶體 位置
    array2->item = newItems;
    // 搬移 array1 到 array2 item
    memcpy(&array2->item[array2->count2], array1, addSize);
    // 紀錄 array2 item 數量
    array2->count2++;
}

int main( void )
{
        char *names[] = { "John", "Mary", "George", "Bob", "Tony" };
        int i;
        // 建立父結構
        Array2 array2;
        CreateArray2(&array2);
        for (i=0; i<5; i++)
        {
                // 添加子結構
                Array1 array1;
                array1.count1 = i;                        // 加入 array1 count    參數
                array1.size1 = sizeof(Array1);        // 加入 array1 空間使用 參數
                strcpy(array1.doc, names);        // 加入 array1 文字     參數
                printf("add array1 size: %d
", array1.size1);
                printf("add array1 name: %s
", array1.doc);
                AddArray2(&array2, &array1);   // 加入父結構
        }
        // 顯示結果
        printf("arrar2 item total  size: %d
", array2.size2);
        printf("arrar2 item total count: %d
", array2.count2);
        for (i=0; i<array2.count2; i++)
        {
                printf("arrar2 item[%d]  size: %d
", i, array2.item.size1);
                printf("arrar2 item[%d] count: %d
", i, array2.item.count1);
                printf("arrar2 item[%d]   doc: %s
", i, array2.item.doc);
        }
}

顯示結果:
add array1    size: 24
add array1 name: John
add array1    size: 24
add array1 name: Mary
add array1   size: 24
add array1 name: George
add array1    size: 24
add array1 name: Bob
add array1    size: 24
add array1 name: Tony

arrar2 item total  size: 120
arrar2 item total count: 5    --> 共 5 筆
arrar2 item[0]  size: 24
arrar2 item[0] count: 0
arrar2 item[0]   doc: John
arrar2 item[1]  size: 24
arrar2 item[1] count: 1
arrar2 item[1]   doc: Mary
arrar2 item[2]  size: 24
arrar2 item[2] count: 2
arrar2 item[2]   doc: George
arrar2 item[3]  size: 24
arrar2 item[3] count: 3
arrar2 item[3]   doc: Bob
arrar2 item[4]  size: 24
arrar2 item[4] count: 4
arrar2 item[4]   doc: Tony



「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則