指針數組和數組指針區別


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
77     //數組指針:一個指向數組的指針,(這個指針帶有特殊的步長)。
78     //char str1[3][10] = { "asdqw", "123124", "xvzxc" };
79     char buf2[][10] = { "111111", "3333333", "222222" };
80     char(*q)[10] = NULL; //q是一個指針,每次 "+1" 跳10個字節(即10個char 元素)的指針。  
81     //q= str1;
82     //printf("q: %d,  q+1: %d \n", q, q + 1);
83
84     printf("排序前");
85     print_fun012(buf2);
86     printf("排序后");
87     sort_fun012(buf2, 3);        //數組內容重新排序(這個是二維數組,行地址不能直接交換,因為它的擁有內存,是一個一維數組
88                                 //單純的地址交換,將使一維數組的首地址丟失。
89     printf("排序后");
90     print_fun012(buf2);
91
92
93
94     printf("\n");
95     system("pause");
96     return 0;
97 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM