註冊 登錄
Android 台灣中文網 返回首頁

jianrupan的個人空間 https://apk.tw/?1180935 [收藏] [複製] [分享] [RSS]

日誌

C 語言完成基本動態陣列處理

已有 277 次閱讀2020-2-20 14:27 |個人分類:軟體應用| 語言, 完成, 基本, 動態, 陣列


#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[i]); // 加入 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[i].size1);
printf("arrar2 item[%d] count: %d ", i, array2.item[i].count1);
printf("arrar2 item[%d]   doc: %s ", i, array2.item[i].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    --> 總共添加筆數
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


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelist

您需要登錄後才可以評論 登錄 | 註冊