Я пытаюсь поменять местами две структуры, которые динамически распределены. Но заменяется только строка (имя). Любой может сказать мне, что случилось с моим фрагментом.Перестановка динамических распределенных структур
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");
}
'
Каждая структура не распределяется динамически независимо. Вы пытаетесь поменять местами две структуры, которые находятся в * динамически распределенной последовательности структур *. Вы не сделаете этого, заменив указатели. В этом есть только один изменяемый указатель: 's' в' main() '. – WhozCraig
Потерять один уровень косвенности на * каждый * указатель в вашей 'swap' функции. Два параметра должны быть 'student *', а 'temp' не должен быть указателем. Остальное может оставаться неизменным. – WhozCraig