交换动态分配的结构
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!!!
我正在尝试交换两个动态分配的结构。但只有 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!!!