第一种情况,pan()
函数传的是数组p
元素的值(即字符串指针),在pan()
函数里对局部变量p1
和p2
交换,不会影响main()
函数里数组p
的元素值。
第二种情况,pan()
函数传的是数组p
的首地址,在pan()
函数里对数组p
里元素(字符串指针)交换,就是对main()
函数里数组p
的操作。
应该是因为你第一种方法修改的是形参的值,形参的值并没有传入到实参中;第二种是数组操作,数组是可以直接在函数内修改值的
你可以指针这一块再看一下
第一种要想成功交换你得传地址进去,在你的程序里面就要把函数的参数类型设置成指向指针的指针
#include <stdio.h>
#include <string.h>
int main()
{
void pan(char **p1, char **p2);
char *p[3] = {"This is word", "this is word", "Chis Is word"};
pan(&p[0], &p[1]);
pan(&p[0], &p[2]);
pan(&p[1], &p[2]);
for (int i = 0; i < 3; i++)
{
printf("%s\n", p[i]);
}
}
void pan(char** p1, char** p2)
{
int a;
char* b;
a = strcmp(*p1, *p2);
if (a > 0)
{
b = *p1;
*p1 = *p2;
*p2 = b;
}
}