交换动态分配的结构

时间:2016-11-20 11:47:04

标签: c struct dynamic-memory-allocation

我正在尝试交换两个动态分配的结构。但只有字符串(名称)交换。任何人都可以告诉我我的代码片段有什么问题。

typedef struct
{
char name[20];
int num;
char ch;
}student;

void swap(student **a,student **b)
{
        student *temp;
        temp = *a;
        *a = *b;
        *b = temp;

}

void main()
{

        student *s;
        int i;
        s = (student *)malloc(10 * sizeof(student));

        printf("enter values: ");

        for(i=0;i<10;i++)
                scanf("%d %c %s",&s[i].num,&s[i].ch,s[i].name);

        swap(s+3,s+4);

        printf("\n");
        for(i=0;i<10;i++)
                printf("%d %c %s\n",s[i].num,s[i].ch,s[i].name);


        printf("\n");
}

2 个答案:

答案 0 :(得分:1)

函数swap()获取两个student **类型的参数。 但是,在调用swap(s+3,s+4);中,您传递了两个student *类型的参数 - 就像s的类型一样。你能编译一下吗?

无论如何,你在swap()函数中正在做的是替换每个指针所指向的内容。也就是说,如果您有两个指向学生的指针(例如:p1,指向学生s1,p2指向学生s2),您可以调用swap(&p1, &p2)并让他们指向另一个学生(即p1到s2和p2到s1)。

但是在你的main()代码中,你没有处理指向student的指针。相反,你试图替换学生自己的内容 - 这不是swap()所做的。

答案 1 :(得分:0)

是一个erron,指针指向相同的内存位置,尝试使用另一个学生指针例如声明另一个学生* s2 !!!