結構體使用分析

//結構體分配內存是四個字節一行

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");

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章