C语言改变函数参数的值,该怎么处理

C语言改变函数参数的值
我有一个函数func(X),X 是字符串类型的,我先把函数最终的结果体现在X中,就是说函数执行完之后,我可以读取X的值得到结。我知道如果X是int等类型的话要用传递实参的引用就可以了,但是现在X是字符串类型的怎么搞。

例如,swap(X,Y),交换X,Y的值,其中X,Y都是字符串类型的。 用C语言实现。
c 字符串 函数参数

------解决方案--------------------

void swap(char *&s1, char *&s2)
{
    char *stemp = s1;
    s1 = s2;
    s2 = stemp;
}//调用时直接传char*的参数就可以了

------解决方案--------------------
和交换引用的int没什么不同
void swap(char* p1, char* p2)
{
char tmp[1000];
strcpy(tmp, char p1);
strcpy(p1, p2);
strcpy(p2, tmp);
}
------解决方案--------------------

void swapStr(char *str1 ,char *str2)
{
    if (strlen(str1) != strlen(str2))
    {
        printf("长度不同无法交换!\n");
        return;
    }

    char *pTemp = new char[strlen(str1)+1];
    memset(pTemp ,0 ,strlen(str1)+1);
    strcpy(pTemp ,str1);
    strcpy(str1 ,str2);
    strcpy(str2 ,pTemp);
    delete []pTemp;
}


int main(int argc, _TCHAR* argv[])
{
    char p1[] = "hello";
    char p2[] = "world";
    swapStr(p1 ,p2);
    printf("%s-%s" ,p1 ,p2);
    return 0;
}