В вашей программе много ошибок ... некоторые из них я не могу исправить, так как не смог получить то, что должно быть предполагаемым поведением ...
Во-первых, вам не нужно глобально объявлять параметры struct s *p1,*p2
функции, которую вы хотите определить. Во-вторых, прототип функции должен включать типы рассматриваемых параметров, а также тип возвращаемого значения (в вашем случае void). В-третьих, первый параметр функции swap - это указатель на вашу структуру, поэтому вам нужно передать первый элемент (указатель на массив s struct) of the
p`.
Следующее компилируется и не вызывает ошибки, даже если я думаю, что его поведение не такое, как вы ожидаете.
#include <stdio.h>
struct s {
char *st;
struct s *sp;
};
void swap(struct s *ptr1, struct s *ptr2);
int main() {
int i;
struct s *p[3];
static struct s a[]={ {"abc",a+1}, {"def",a+2}, {"ghi",a} };
for(i=0;i<3;i++) {
p[i] = a[i].sp;
}
swap(p[0], a);
printf("%s %s %s\n",p[0]->st,(*p)->st,(*p)->sp->st);
return 0;
}
void swap(struct s *ptr1, struct s *ptr2) {
char *temp;
temp = ptr1->st;
ptr1->st = ptr2->st;
ptr2->st = temp;
}