首页 > 代码库 > 二维数组和指针数组做形参

二维数组和指针数组做形参

 先回顾一下二维数组的写法:

1. int array[3][4];

2. int array[][4];

3. int (*array)[4];

不管怎么样,二维的长度是不能省略的,多维数组(不管二维,三维,四维。。。)最多只能省略第一维的长度;

 

比较好玩的是第三种:

注意两种不同: int (*array1)[N];

 int  *array2[N];

 

我比较喜欢下面这种方式,那么两种有什么不同呢,int (*array1)[N] ------array1是一个指向一维数组的指针,

而  int *array2[N]  -------array2是一个指针数组(一个数组,里面存放的每一个都是指针) 

 

 

如果你看一下它们的类型就会发现, array1 的类型是指向 int[N]的指针,这种写法和int[][N]是一样一样的,可以类比  int *arr  int arr[]来记

   而array2 的类型是int *   所以这种写法和int **是一样一样的

 

考虑好下个问题,就很清楚了,我们现在要对字符串排序,那么实现的方法无非是两种,一种是二维数组实现,一种是用指针数组实现

 

我们以 int (*array)[N]为例:

 1 void sort1(char (*str)[100], const int len){
 2     if(len>1){
 3         char temp[1024];
 4         int left=0,right=len-1;
 5         while(left<right){
 6            strcpy(temp,str[left]);
 7             while(left<right&&strcmp(str[right],temp)>=0){
 8                 right--;
 9             }
10             strcpy(str[right],str[left]);
11             while(left<right&&strcmp(str[left],temp)<0){
12                 left++;
13             }
14             strcpy(str[left],str[right]);
15         }
16         strcpy(str[right],temp);
17         sort1(str,left);
18         sort1(str+right+1,len-right-1);
19     }

20 } 

1 char s[][100]={"c++","prime","linux","programming","design","advanced"\
2         ,"programming2","of","unix"};

3 sort1(s,9); 

 

 

注意形参和实参

 再来看第二种

 1 void sort(char *str[],const int len)
 2 {
 3     if(len>1){
 4         int left=0,right=len-1;
 5         while(left<right){
 6             char temp[100];
 7             strcpy(temp,str[left]);
 8             while(left<right&&strcmp(str[right],temp)>=0){
 9                 right--;
10             }
11             swap(str,left,right);
12             while(left<right&&strcmp(str[left],temp)<0){
13                 left++;
14             }
15             swap(str,left,right);
16         }
17         sort(str,left);
18         sort(str+right+1,len-right-1);
19     }   

20 } 

1 char *s[100]={"c++","prime","linux","programming","design","advanced"\
2         ,"programming2","of","unix"};

3 sort(s,9); 

 char *s[N]使用十分方便

 

二维数组和指针数组做形参