标签:des style blog color 使用 ar sp div on
先回顾一下二维数组的写法:
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]使用十分方便
二维数组和指针数组做形参
标签:des style blog color 使用 ar sp div on
原文地址:http://www.cnblogs.com/katsura-youhei/p/array_and_ptr.html