我正在尝试交换两个动态分配的结构。但只有字符串(名称)交换。任何人都可以告诉我我的代码片段有什么问题。
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");
}
答案 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 !!!