通訊錄的實現(二)動態實現

2021-09-25 00:23:16 字數 3039 閱讀 3453

動態實現實現通訊錄,就需要使用malloc和realloc等這些函式,首先我們先來介紹一下這些函式。

(1)void *malloc(unsigned  int  size);
size是需要分配的位元組數。

(2)void *calloc(unsigned int num_elements,unsigned int elements_size);
num_elements是分配的元素個數,elements_size是每個元素佔的位元組數。

(3)void *realloc(void *p,unsigned int new_size);
new_size是修改後的位元組數,p是原先的記憶體首位址。

由於這些函式都是在堆(heap)裡開闢的空間,使用完後需要釋放,所以就需要free函式。

(4)void free(void *p);
p是需要釋放的空間的首位址。

前邊3個函式都需要free,如果不free就可能造成記憶體洩漏。free釋放完成後需要置為null。我們在使用指標之前必須要有乙個原則,那就是使用之前先判斷是否為空、使用之後需要置為null。

下來我們就來實現動態增長通訊錄。

#define _crt_secure_no_warnings 1

#ifndef __contact_h__

#define __contact_h__

#include #include enum op

;#define name_max 20

#define ***_max 5

#define tele_max 12

#define addr_max 25

#define max 1000

#define max_init 2

#define max_rise 2

typedef struct perinfo

peoinfo;

typedef struct contact

contact,*pcon;

void init_contact(pcon pcon);

void _add_contact(pcon pcon);

void _display_contact(pcon pcon);

void _del_contact(pcon pcon);

void _search_contact(pcon pcon);

void _modify_contact(pcon pcon);

void _sort_contact(pcon pcon);

void _clear_contact(pcon pcon);

#endif //__contact_h__

#define _crt_secure_no_warnings 1

#include "contact.h"

////git

//svn

//void init_contact(pcon pcon)

pcon->size=0;

pcon->capacity=max_init;

}void _add_contact(pcon pcon)

*/if(pcon->size >= pcon->i)

else

printf("請輸入名字:>");

scanf("%s",pcon->data[pcon->size].name);

printf("請輸入年齡:>");

scanf("%d",&(pcon->data[pcon->size].age));

printf("請輸入性別:>");

scanf("%s",pcon->data[pcon->size].***);

scanf("%s",pcon->data[pcon->size].tele);

scanf("%s",pcon->data[pcon->size].addr);

pcon->size++;

printf("新增成功\n");

}void _display_contact(pcon pcon)

}static int find_entry(pcon pcon, char *name)

}return -1;

}void _del_contact(pcon pcon)

printf("請輸入要刪除人的名字:>");

scanf("%s",name);

pos = find_entry(pcon, name);

if(pos == -1)

//for(index = pos; index < pcon->size; index++)

pcon->size--;

printf("刪除成功\n");

}void _search_contact(pcon pcon)

;int pos = 0;

printf("請輸入要查詢人的名字:>");

scanf("%s",name);

pos = find_entry(pcon, name);

if(pos == -1)

else

}void _modify_contact(pcon pcon)

;int pos = 0;

printf("請輸入要修改人的名字:>");

scanf("%s",name);

pos = find_entry(pcon, name);

if(pos == -1)

else

}//volatile

void _sort_contact(pcon pcon)

;tmp = pcon->data[j];

pcon->data[j] = pcon->data[j+1];

pcon->data[j+1] = tmp;}}

}}void _clear_contact(pcon pcon)

動態實現通訊錄

動態實現,借用之前以及寫好的通訊錄 在結構體內新增柔性陣列 主要是柔性陣列的使用 int i 0 list p list malloc sizeof list 100 sizeof int p i 100 for i 0 i 100 i include include include include...

動態通訊錄的實現

contact.h ifndef contact h define contact h enum option include include include include define name max 20 define max 5 define age max 3 define tel ma...

通訊錄的實現

ifndef contacts h define contacts h define name length 20 define length 10 define tele length 11 define addr length 30 define max 1000 struct peoplein...