指针数组和数组指针区别
1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 //指针数组的传参;相当于普通的一维数组。
7 void print_fun011(char **str, int n)
8 {
9 for (int i = 0; i < n; i++)
10 printf("%s, ", *(str + i));
11 printf("\n");
12 }
13
14 void sort_fun011(char **str, int n)
15 {
16 //冒泡排序
17 for (int i = 0; i < n - 1; i++)
18 {
19 char *tmp;
20 for (int j = 0; j < n - 1 - i; j++)
21 {
22 if (strcmp(*(str + j), *(str + j + 1)))
23 {
24 tmp = *(str + j + 1);
25 *(str + j + 1) = *(str + j);
26 *(str + j) = tmp;
27 }
28 }
29 }
30 }
31 //数组指针:一个特殊的指针(步长特殊),指向一个数组。
32 void print_fun012(char(*p)[10])
33 {
34 for (int i = 0; i < 3; i++)
35 printf("%s, ", *(p + i));
36 printf("\n");
37 }
38
39 void sort_fun012(char(*p)[10], int n)
40 {
41 char tmp[10];
42 //选择排序
43 for (int i = 0; i < n ; i++)
44 {
45 for (int j = i + 1; j < n; j++)
46 {
47 if (strcmp(*(p + i), *(p + j))> 0)
48 {
49 strcpy(tmp, *(p + i));
50 strcpy(*(p + i), *(p + j));
51 strcpy(*(p + j), tmp);
52 }
53 }
54 }
55 }
56 int main(void)
57 {
58 //普通一维数组;数据类型是char [10]:(表示数组有10个元素,每个元素都是char型)
59 char a[10];
60 char *e = NULL; //e是一个一级指针,用来接收普通的一维数组
61 e = a; //e每次"+1",跳过一个(char 类型),即一个字节
62 printf("e: %d, e+1: %d \n", e, e + 1);
63
64 //指针数组相当于普通的一维数组,不过数据类型是 char *[5]:(表示数组有5个元素,每个元素都是char 型的指针);
65 char *str[5] = { "sdada", "saadq", "wqeqwe", "12sda", "wq32r" };
66 char **w = NULL; //w是一个二级指针,接收指针数组。
67 w = str; //w 每次 "+1" 跳过1个(char *类型),即四个字节(32bit平台)。
68 printf("w: %d, w+1: %d \n", w, w + 1);
69
70 printf("排序前");
71 print_fun011(str, 5);
72 printf("排序后");
73 sort_fun011(str, 5); //数组内容重新排序(两个有本质区别,这个只是地址交换)
74 print_fun011(str, 5