Вы пытаетесь передать по ссылке, чтобы поменять строки, и используете для этого указатели - это правильный способ сделать это! Однако, поскольку это строка в C, ваши фактические переменные - это указатели . Эти адреса указателя передаются (и меняются) по значению. Действительно, если вы поместите функцию печати внутри func
, вы увидите, что строки печатаются в том порядке, который вы ожидаете.
void func(char *p, char *q)
{
char *temp = p;
p = q;
q = temp;
printf("%s, %s", p, q);
}
int main()
{
char *p ="hello";
char *q ="world";
func(p,q);
printf("%s, %s", p, q);
return 0;
}
world, hellohello, world
ЕслиВы хотите поменять местами две переменные, вам нужно только передать их указатели и поменять их местами, но если вы хотите поменять местами сами указатели , , вам нужно передать ссылки на указатели.
#include <stdio.h>
void func(char **p, char **q)
{
char *temp = *p;
*p = *q;
*q = temp;
}
int main()
{
char *p ="hello";
char *q ="world";
func(&p,&q);
printf("%s, %s", p, q);
return 0;
}
world, hello
Демо