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);
75
76