C语言指针数组名做实参的一个问题, 有点基础的麻烦进来帮小弟解决一下,感激不尽啊
#include<stdio.h>#include<string.h>
void mymin(char **w,int n);
main()
{
char *p[4];
int i=0;
p[0]="ab";
p[1]="a";
p[2]="abc";
p[3]="abcd";
printf("before:\n");
for(i=0;i<4;i++)
printf("p[%d]->%s\n",i,p[i]);
printf("\n");
mymin(p,4);
printf("after:\n");
for(i=0;i<4;i++)
printf("p[%d]->%s\n",i,p[i]);
printf("\n");
}
void mymin(char **w,int n)
{
int i=0,k=0;
char *temp;
for(i=0;i<n;i++)
if(strcmp(w[i],w[k])<0) k=i;
temp=w[0];w[0]=w[k];w[k]=temp;}
关于**w,我想的是, 在mymin函数中,**w是指向p[]的对吧, 当它w[0]与w[1]交换指向后, 应该是说,w[0]->p[1] ,w[1]->p[0];它改变了w的指向, 但不影响到p的指向,p[0]照样指向“ab” ,p[1]->"a",相当于w[0]->p[1]->"a", w[1]->p[0]->"ab",p[0]仍然是"ab", 但后面main函数中按p[i]来输出,那应该是没有改变啊?