人麻了,太菜了。
- void str_exchange(char (*a)[MAX_FILEPATH_LEN],char (*b)[MAX_FILEPATH_LEN]){
- char *tmp = (char *)malloc(MAX_FILEPATH_LEN*sizeof(char));
- memset(tmp,0,sizeof(tmp));
- strcpy(tmp,*a);
- strcpy(*a,*b);
- strcpy(*b,tmp);
- free(tmp);
- }
-
- void bubble_sort(char (*allFilePath)[MAX_FILEPATH_LEN],int dimension){
- int flag;
- for(int i=0;i<dimension;i++){
- flag = 0;
- for(int j=0;j<dimension-i-1;j++){
- if(strcmp(allFilePath[j],allFilePath[j+1])>0){
- str_exchange(&allFilePath[j],&allFilePath[j+1]);
- flag = 1;
- }
- }
- if(!flag)
- break;
- }
- }
-
-
- char allFilePath[TOTAL_SWITCH_TURNS_NUM][MAX_FILEPATH_LEN] = {""};
- int main(void){
-
- //dump data to allFilePath...
- //ready to sort
- bubble_sort(allFilePath,10);
- return 0;
- }
1.首先应该明确,二维数组allFilePath的类型不是char** !!!,而是char (*)[ ],即数组指针类型,数组的每个指针指向字符数组,这在写bubble_sort的第一个形参时要注意。
2.既然allFilePath是指针,我们想要修改其指向的内容,就不需要实参传递allFilePath的指针,而是直接传递其本身即可。
3.同样是传参,在设计str_exchange是,我们传入的数组的指针,不是char **,所以需要写成char (*)[ ]的形式;(这里要理解指向数组的指针和指向数组首元素的指针,他们的类型是不同的,虽然存的值相同,我们交换的整个字符数组,而不改变某个字符,所以这里应该用字符数组的指针)