你的思路是没错的,首先明白函数参数是按值传递,所以要修改指针本身的值必须用二级指针也就是指向指针的指针。
字符数组名本身是常量指针是无法修改的!所以必须要定义变量指针指向字符串。
仅供参考!
指针排序只交换指向,并没有复制任何数据。所以效率比复制数据高,尤其是大量数据时就提现指针的优势。
#include <stdio.h>
#include <string.h>
int main()
{
void swap(char **, char **);
char st1[20], st2[20], st3[20];
char *p1, *p2, *p3;
p1 = st1;
p2 = st2;
p3 = st3;
fgets(st1, 19, stdin);
fgets(st2, 19, stdin);
fgets(st3, 19, stdin);
if (strcmp(p1, p2) > 0)
swap(&p1, &p2);
if (strcmp(p1, p3) > 0)
swap(&p1, &p3);
if (strcmp(p2, p3) > 0)
swap(&p2, &p3);
printf("\n%s%s%s", p1, p2, p3);
return 0;
}
void swap(char **a, char **b)
{
char *tmp = *a;
*a = *b;
*b = tmp;
}
要用strcpy交换,光交换指针没用
这个问题昨天回答过 https://ask.csdn.net/questions/7959325/54228807
你是他同学?
#include <stdio.h>
#include <string.h>
int main()
{
void mystrcmp(char *, char *); //注意,strcmp已经是库函数了,你要换一个名字
char *p1, *p2, *p3;
char a[100], b[100], c[100];
p1 = &a;
p2 = &b;
p3 = &c;
scanf("%s", p1);
scanf("%s", p2);
scanf("%s", p3);
mystrcmp(a, b);
mystrcmp(b, c);
mystrcmp(a, b);
printf("从小到大输出为:\n%s %s %s", p1, p2, p3);
return 0;
}
void mystrcmp(char * a, char * b)
{
char tmp[100];
if (strcmp(a, b) > 0)
{
strcpy(tmp, a);
strcpy(a, b);
strcpy(b, tmp);
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:void f (int * p)//这里上面说过了,变量名是i,但是类型是int *,可以保存其他变量的地址。
{
*p=100;//上面也说过,*p就是i,i就是*p
}
int main()
{
int i=9;//这是一个普通的定义和赋值
f(&i);//这里要是调用函数,用&i,把i的地址传递给函数的参数p
cout<<"i"<<i;//结果应该是100
return 0;
}