動的に割り当てられた2つの構造をスワップしようとしています。しかし、文字列(名前)のみが入れ替わります。誰でも私のスニペットに何が間違っているのかを教えてくれる。動的割り当て構造のスワップ
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");
}
「
各構造体は、個別に動的に割り当てられません。動的に割り当てられた単一の構造体のシーケンス内にある2つの構造体を交換しようとしています。あなたはポインタを交換することでそれをするつもりはありません。この中には 'main()'の 's'という可変ポインタしかありません。 – WhozCraig
'スワップ(swap) '機能の*ポインタごとに1レベルのインダイレクションを失います。 2つのパラメータは 'student *'でなければならず、 'temp'はポインタではありません。残りは同じままです。 – WhozCraig