字符数组:
char str1[]="abcdef";
char str2[]="qwerty"
str1 和str2 的地址都在栈里,如果要交换str1和str2的值只需
char *p=(char *)malloc(n*sizeof(char)); //n为str1/str2的字符个数(包括'\0')
strcpy(p,str1);
strcpy(str1,str2);
strcpy(str2,p);
free(p);
例:
#include
#include
#include
void swap(char *str1,char *str2,int n)
{
char *p=(char *)malloc(n*sizeof(char));
strcpy(p,str1);
strcpy(str1,str2);
strcpy(str2,p);
free(p);
}
int main()
{
char str1[]="abcdef";
char str2[]="qwerty";
printf("str1=%s\nstr2=%s\n",str1,str2);
swap(str1,str2,sizeof(str2));
printf("str1=%s\nstr2=%s\n",str1,str2);
return 0;
}
结果:
字符串常量:
char *arr="abcdef";
char *brr="qwerty";
arr和brr的地址在栈里,而“abcdef”和“qwerty”的地址在全局(静态)数据区,
arr只保存了“abcdef”的首地址,brr只保存了“qwerty”的首地址
若要交换arr和brr的值,只能将arr和brr保存的首地址进行交换而不能向字符数组一样进行拷贝
如:
char *p=arr;
arr=brr;
brr=p;
如果在自定义函数中,如:
void swap(char **str1,char **str2)
{
char *p=*str1;
*str1=*str2;
*str2=p;
}
例:
#include
#include
#include
void swap(char **str1,char **str2)
{
char *p=*str1;
*str1=*str2;
*str2=p;
}
int main()
{
char *arr="abcdef";
char *brr="qwerty";
printf("arr=%s\nbrr=%s\n",arr,brr);
swap(&arr,&brr);
printf("arr=%s\nbrr=%s\n",arr,brr);
return 0;
}
结果: