メモリの割り当てと割り当て解除へのポインタを含む三次元構造
書式#include <stdio.hに> する#include < 文字列の.h> の#include <stdlib.h>に含ま typedefは構造体の先生 { 文字名[ 64 ]。 char * alisname。 int型の年齢; int型のID。 }先生; 空 printTeacher(教師*配列、int型NUM) { int型私= 0 ; 用(; I <NUM;私は++ ) { printf(" 年齢:%Dを\ n " 、配列[i]の.age)。 } } 空 sortTeacher(教師*配列、int型NUM) { int型I、J。 教師TMP; 用(i = 0 ; iは<NUM; iは++ ) { 用(J = I + 1、J <NUM; J ++ ) { もし(配列[I] .age> 配列[J] .age) { TMP = 配列[J]。 アレイ[J] = 配列[i]は、 配列[I] = TMPと、 } } } } int型 createTeacher(教師** PT、int型NUM) { int型私= 0 ; 先生 * TMP = NULL; TMP =(教師*)のmalloc(NUMの*のはsizeof (教師))。 もし(NULL == TMP) { リターン 0 ; } memsetの(TMP、0、はsizeof(教師)* 数値)。 用(i = 0 ; iは<NUM; iは++ ) { TMP [I] .alisname =(CHAR *)のmalloc(60 )。 } *のpT = TMP; リターン 0 ; } 空 FreeTeacher(教師* pを、int型NUM) { int型私= 0 ; もし(P == NULL) { 返します。 } 用(i = 0 ; iは<NUM; iは++ ) { もし(P [i]が.alisname!= NULL) { フリー(P [i]の.alisname)。 } } 無料(P); } int型のmain() { int型 RET = 0 ; int型私= 0 ; int型 NUM = 3 ; 先生 * pArray = NULL; RET = createTeacher(&pArray、NUM)。 もし(RET!= 0 ) { printf(" FUNCのcreateTeacher()ERR:%Dを\ n " 、RET)。 リターンRET; } 用(i = 0 ; iは<NUM; iは++ ) { printf(" \ nplease年齢を入力してください:" ); scanf関数(" %のD "、および(pArray [I] .age))。 printf(" \ nplease名前を入力してください:" ); scanf関数(" %sの" 、(pArray [I] .nameの))。 printf(" \ npleaseエイリアスを入力してください:" ); scanf関数(" %sの" 、(pArray [I] .alisname))。 } printTeacher(pArray、NUM)。 sortTeacher(pArray、NUM)。 printf(" の後にソート\ N " ); printTeacher(pArray、NUM)。 FreeTeacher(pArray、NUM)。 リターン 0 ; }