zoukankan      html  css  js  c++  java
  • 指针数组和数组指针区别

    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(" ");
    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(" ");
    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 ", 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 ", 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 ", 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(" ");
    95     system("pause");
    96     return 0;
    97 }

  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/dpf-learn/p/6108535.html
Copyright © 2011-2022 走看看