C语言结构体学习系列之(二)

来源:互联网 发布:推荐淘宝女装质量好的 编辑:程序博客网 时间:2024/05/28 23:08

1,结构体做函数参数,应该注意的是,再被调用函数中改变结构体的值与普通变量的方法一样,不能直接定义两个普通形参接收,然后修改形参,这只是修改了形参的值,正确的方法是定义一个指针,然后把结构体地址传给指针,然后用指针进行修改。例:

void copyTeacher(T to, T from){    to = from;}void copyTeacher2(T *to, T *from){    //(*to) = (*from);    *to = *from;}void main12(){    T tone = { "aaaa", 32, 02 };    T ttwo;    //copyTeacher(ttwo, tone);    //printf("copyTeacher()after \n");    //printf("ttwo.name = %s\n", ttwo.name);    //printf("ttwo.age = %d", ttwo.age);    copyTeacher2(&ttwo, &tone);    printf("copyTeacher()after \n");    printf("ttwo.name = %s\n", ttwo.name);    printf("ttwo.age = %d", ttwo.age);    system("pause");}

我们可以看到,调用copyTeacher()函数最后打印的是一堆乱码,
而调用copyTeacher2()函数打印的是正确的。

2,结构体做函数参数的例程:

#define  _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <stdio.h>typedef struct Teacher{    char name[64];    int age;    int id;}Teacher;void printTeacher(Teacher *Array, int num){    int i = 0;    for (i = 0; i < num; i++)    {        printf("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 = i + 1; j < num; j++)        {            if (Array[i].age>Array[j].age)            {                tmp = Array[i];                Array[i] = Array[j];                Array[j] = tmp;            }        }    }}Teacher * createTeacher(int num){    Teacher *tmp = NULL;    tmp = (Teacher *)malloc(sizeof(Teacher)*num);    if (tmp == NULL)    {        return NULL;    }}int createTeacher2(Teacher **p, int num){    Teacher *tmp = NULL;    tmp = (Teacher *)malloc(sizeof(Teacher)*num);    if (tmp == NULL)    {        return -1;    }    *p = tmp;   //二级指针形参去间接修改 实参的值    return 0;}void FreeTeacher(Teacher *p){    if (p != NULL)    {        free(p);    }}void main(){    int i = 0;    //Teacher Array[3];    int num = 3;    Teacher *pArray = NULL;    createTeacher2(&pArray,num);    if (pArray == NULL)    {        return;    }    for (i = 0; i < num; i++)    {        printf("\nplease enter age:");        scanf("%d", &(pArray[i].age));    }    printTeacher(pArray, num);    sortTeacher(pArray, num);    printf("排序之后:\n");    printTeacher(pArray, num);    free(pArray);    pArray = NULL;    system("pause");}
0 0
原创粉丝点击