二维数组和指针数组做形参
先回顾一下二维数组的写法:
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]为例:
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 }
2 ,"programming2","of","unix"};
3 sort1(s,9);
注意形参和实参
再来看第二种
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 }
2 ,"programming2","of","unix"};
3 sort(s,9);
char *s[N]使用十分方便
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。