В это определение функции
void swapping(char s1[],char s2[])
{
int temp=s1;
s1=s2;
s2=temp;
}
переменная s1
имеет тип char *
в то время как переменная temp
имеет тип int
. Компилятор не может сделать инициализацию temp
в декларации
int temp=s1;
без литья s1 к типу Int. Но если вы добавите кастинг, функция не имеет смысла.
Учитывайте, что в массивах нет оператора присваивания.
Если ваш компилятор поддерживает массивы переменной длины, то вы можете написать
#include <stdio.h>
#include <string.h>
void swapping(size_t n, char s1[n], char s2[n])
{
char tmp[n];
strcpy(tmp, s1);
strcpy(s1, s2);
strcpy(s2, tmp);
}
int main(void)
{
char s1[30] = "Hello";
char s2[30] = "Bye-bye";
printf("%s\t%s\n", s1, s2);
swapping(30, s1, s2);
printf("%s\t%s\n", s1, s2);
return 0;
}
В противном случае функция может выглядеть, как показано ниже
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void swapping(char s1[], char s2[], size_t n)
{
char *tmp = malloc(n * sizeof(char));
strcpy(tmp, s1);
strcpy(s1, s2);
strcpy(s2, tmp);
free(tmp);
}
int main(void)
{
char s1[30] = "Hello";
char s2[30] = "Bye-bye";
printf("%s\t%s\n", s1, s2);
swapping(s1, s2, 30);
printf("%s\t%s\n", s1, s2);
return 0;
}
В обоих случаях выход
Hello Bye-bye
Bye-bye Hello
Перемещение 30 элементов одновременно? –
Пожалуйста, уделите время изучению основ C или C++. – juanchopanza
, чтобы вы помогли? –