Android 台灣中文網
標題:
C 語言完成基本動態陣列處理
[打印本頁]
作者:
jianrupan
時間:
2020-2-20 14:07
標題:
C 語言完成基本動態陣列處理
#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 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1