//結構體分配內存是四個字節一行 struct Teacher{ char name[62]; //64 int age;//4 char c1; char c2; }; 大小爲72 |
struct Teacher{ char c1; char c2; char name[62]; //64 int age;//4 }; 大小爲68 |
變量做函數參數具有副本機制(將實參copy給形參),所以並不能真正改變實參值 void copyObj01(struct Teacher from, struct Teacher to) { //只是將實參兩個值分別賦給了from和to,然後操作from和to }
void copyObj02(struct Teacher *from, struct Teacher *to) { //直接操作實參地址,通過地址間接修改實參值 } |
#include "stdio.h" #include "stdlib.h" #include "string.h"
//兩個結構體變量之間的copy行爲 struct AdvTeacher { char name[64];//64 char *a_name; //4 int age ; //4 };
int printtArray(struct AdvTeacher *pArray, int num) { int i = 0; for (i=0; i<num; i++) { printf("\n %d ", pArray[i].age); printf("%s ", pArray[i].name); printf("%s ", pArray[i].a_name); } return 0; }
int sorttArray(struct AdvTeacher *pArray, int num ) { int i = 0, j = 0; struct AdvTeacher tmp; for (i=0; i<4; i++) { for (j=i+1; j<num; j++) { if (pArray[i].age < pArray[j].age) { tmp = pArray[i]; pArray[i] = pArray[j]; pArray[j] = tmp; } } } return 0; }
struct AdvTeacher* creatTArray(int count) { int i = 0; struct AdvTeacher*p1 = (struct AdvTeacher *)malloc(count*sizeof(struct AdvTeacher )); if (p1 == NULL) { return NULL; } for (i=0; i<count; i++) { memset(&p1[i], 0, sizeof(struct AdvTeacher)); memset(p1+i, 0, sizeof(struct AdvTeacher)); p1[i].a_name = (char *)malloc(128*sizeof(char)) ;// char buf[128*4] memset(p1[i].a_name , 0, 128*sizeof(char)); } return p1; } void freeTArray(struct AdvTeacher* tArray, int num) { int i = 0;
if (tArray == NULL) { return ; }
for (i=0; i<num; i++) { char *p = tArray[i].a_name; //爲什麼這裏需要釋放 if (p != NULL) { free(p); }
//輔導的時候,如果誰犯這個錯誤,拿10元買水果。立字 if (tArray[i].name != NULL) //這個地方要怎麼做?錯誤,不能單獨釋放結構體中某一個內存單元,因爲是整體申請的 { free(tArray[i].name); } }
if (tArray != NULL) { free(tArray); tArray = NULL; //垃圾話語 } }
void main() { int i = 0; struct AdvTeacher *pArray = creatTArray(4); if (pArray == NULL) { return ; }
// { // //p // char *p = (char *)malloc(100); // free(p+1); // }
for (i=0; i<4; i++) { int tmp = 0;
char *p = pArray[i].a_name;
printf("\n請輸入age: " ); scanf("%d", &(pArray[i].age) ) ;
printf("\n請輸入名字: " ); scanf("%s", pArray[i].name);
printf("\n請輸入別名: " ); scanf("%s", p); }
printf("\nsorted before\n"); printtArray(pArray, 4 );
printf("\nsorted after\n"); sorttArray(pArray, 4 ); printtArray(pArray, 4 );
freeTArray(pArray, 4);
system("pause"); } |
結構體使用分析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.