c语言用指针数组对10个字符串排序(形参是如何影响原函数的?)

#include<stdio.h> #include<string.h> int main() { void sort(char *[]); int i; char str[10][6], *p[10] ;for(i=0;i<10;i++) scanf("%s",str[i]); for(i=0;i<10;i++) p[i]=str[i]; sort(p); printf("the output 10 string:\n"); for(i=0;i<10;i++) printf("%s,",p[i]); } void sort(char *s[]) {char *temp; int i,j; for(i=0;i<9;i++) for(j=i;j<10;j++) if(strcmp(*(s+i),*(s+j))>0) {temp=*(s+i); // *(s+i)=*(s+j);// *(s+j)=temp;// } } 问题:再函数里利用指针temp交换了指针数组,但这个数组指针不是另外开辟的空间吗?他是怎么使得原指针数组发生了改变的。麻烦了。

第1个回答  2020-05-08
C里面的字符串最后都是以数0(也就是
'\0'
这个符号)来表示结尾的。
计算字符串的长度的函数在头文件<string.h>已经提供了,也就是这个strlen(const
char
*)。
然后呢,就是表示字符串的数组了,在C里字符串虽然是数组实现的,但现在这个字符串数组的意思却是“由字符串组成的数组”,而不是“组成字符串的数组”。
字符串是数组,是字符数组,数组的名称就是这个数组的首地址,字符串的名称就是这个字符串的首地址,存放字符串的数组存放的那就是首地址了,也好办,就是:
char
**array;
我们来具体给他赋值:
1,给这个存放首地址的数组分配内存空间
int
Size=10;
char
**array=(char
**)malloc(
Size
*
sizeof(char
*)
);
2,然后给它的每一个元素赋上每一个字符串的首地址
array[0]="什么JB玩意";
array[1]="逗你玩呢";
....
3,然后根据字符串长度排序:
int
i;
char
*swap;
for(i=0;i<Size-1;i++){

if(strlen(array[i])<strlen(array[i+1])){

swap=array[i];

array[i]=array[i+1];

array[i+1]=swap;

}
}
4,排序好后输出:
for(i=0;i<Size;i++)

printf(array[i]);
好了,就这些了