gpt4 book ai didi

c - 交换动态分配的结构

转载 作者:行者123 更新时间:2023-11-30 15:03:34 24 4
gpt4 key购买 nike

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

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() 所做的。

关于c - 交换动态分配的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40703649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com