交换动态分配的结构

Swapping Dynamic allocated structures

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

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

'

函数swap()得到两个student **类型的参数。 但是,在调用 swap(s+3,s+4); 中,您向它传递了两个 student * 类型的参数——s 的类型也是如此。你能编译它吗?

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

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

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