|
|
发表于 2012-12-12 23:58:37
|
显示全部楼层
- #include<stdio.h>
- #include<string.h>
- void sort(char (*p)[5]);
- void main()
- {
- char a[4][5] = {"wosh","shi","chua","qi"};
- sort(a);
- }
- void sort(char (*p)[5])
- {
- int i, j, pos;
- char q;
- for(i = 0; i<3; i++)
- {
- for(j =i+1; j<4; j++)
- {
- if( (*(*p+i)) - ( *(*p+j))) /*比较大小*/
- {
- q = *(*p+i); /*交换*/
- *(*p+i) = *(*p+j);
- *(*p+j) = q;
- }
- }
- }
- printf("%s\n",*p);
- }
- /*
- 这是一个数组指针的问题, 首先char[4][5]是一个char[][5]这个类型的数据
- 对应的指针就为char(*)[5], 也就是说这是一个指针, 指针指向的是一个数组
- 数组的类容都是字符串,也就是指针地址.
-
- *p等价于p 也就是 wosh的地址
- p+1就意味着加了20个字节. 也就是现在p指向了shi
- 依次类推...
-
-
- 上面的(*p+i)的意思是: (*p)是wosh的地址, 那(*p+i)那就是指向了o这个字符
- 那么*(*p+i)的意思是就是取出o了.
-
- 你可以实验一下:
- #include<stdio.h>
- #include<string.h>
-
- int main()
- {
- char a[4][5] = {"wosh","shi","chua","qi"};
-
- char (*p)[5] = a;
-
- printf("p = %d\n",sizeof(p));
-
- printf("%s\n",*p);
- printf("%c\n",*(*p+1));
-
- printf("%s\n",*(p+1));
-
- return 0;
-
- }
-
- 这里只对第一个字符做了排序, 我的意思是后面的你自己当作练习
- 我相信你会明白的.
- */
复制代码 |
|