c/c++学习------>结构体

来源:互联网 发布:剪歌软件 编辑:程序博客网 时间:2024/06/11 15:21

结构体

1.定义和初始化

struct Teacher {     char name[32];     int age;     int id;};struct Teacher t1 = {"name", 54, 01}; //结构体类型 定义变量并初始化。typedef struct Student {     char name[32];     int age;     int id;}Student;Student t2;
t2 = {"name1", 22, 02}; //先定义变量,再进行初始化。
2.使用结构体
t1.name = "name2";   //第一种:通过寻址操作进行,寻址操作本身没有操作内存,赋值的时候才操作内存。t1.age = 50;Student *p = NULL;//第二种:通过指针间接赋值改变数据。p = &t2;p->name = "sduiso";p->age = 20;

3.结构体做函数参数(结构体变量 PK 结构体指针)

结构体变量做函数参数修改的是的形参的值,和实参没有半毛钱关系;但是用结构体指针做函数参数时,修改的是实参本身。
typedef struct Teacher{     char name[32];     int age;     int id;}Teacher;void copyTeacher(Teacher *to, Teacher *from){    *to = *from;}
int main(){    Teacher t1 = {"name", 54, 01};    Teacher t2;    Teacher t3;    t2 = t1;    printf("t2.name:%s\n", t2.name); name//c编译器支持结构体赋值操作    printf("t2.age:%d\n", t2.age);    54    copyTeacher(&t3, &t1);//传结构体指针当函数参数    printf("copyTeacher() after............\n");    printf("t3.name:%s\n", t3.name);  name    printf("t3.age:%d\n", t3.age);    54    return 0;}
4.结构体做函数基本操作
/*--------------------------------------------------------------------------------------*/
typedef struct Teacher{     char name[32];     int age;     int id;}Teacher;

Teacher * creatTeacher01(int num)//在堆上申请内存空间{    Teacher * tmp = NULL;    tmp = (Teacher*)malloc(sizeof(Teacher) * num);    if (tmp == NULL)    {        printf("tmp malloc memory size fail.\n");        return NULL;    }}
p, li { white-space: pre-wrap; }
int creatTeacher02(Teacher **pT, int num)    //二级指针,实参取地址传给形参(二级指针接一级指针),间接修改实参的值
{
    int ret = 0;
    Teacher * tmp = NULL;
    tmp = (Teacher*)malloc(sizeof(Teacher) * num);
    if (tmp == NULL)
    {
        ret = -1;
        printf("tmp malloc memory size fail:%d\n", ret);
        return ret;
    }
    *pT = tmp;
    return ret;
}

p, li { white-space: pre-wrap; }
void freeTeacher(Teacher *p)//释放内存
{
    if (p != NULL)
    {
        free(p);
        p = NULL;
    }
}
void printTeacher(Teacher *array, int num) //打印{ int i=0; for(i=0; i<num; i++) { printf("array[i].age:%d\n", array[i].age); }}void sortTeacher(Teacher *array, int num)//排序{ int i, j; Teacher tmp; for (i=0; i<num; i++) { for(j=0; j<num; j++) { if (array[i].age > array[j].age) { tmp.age = array[i].age; array[i].age = array[j].age; array[j].age = tmp.age; } } }}int main(){
    int ret = 0;    int i = 0;    Teacher Array[3];    int num = 3;    Teacher *pArray = NULL;
    //pArray = creatTeacher01(num);
    ret = creatTeacher02(&pArray, num);    if (ret != 0)
    {
printf("creatTeacher() return err:%d", ret);
return ret;
    }
    for(i=0; i<num; i++)    {        printf("Please input age:");        scanf("%d", &(pArray[i].age));    }    printTeacher(pArray, num);    sortTeacher(pArray, num);    printTeacher(pArray, num);
    freeTeacher(pArray);    return 0;}