• 指针数组和数组指针区别


    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 }

  • 相关阅读:
    javascript中的常用表单事件用法
    关于js键盘事件的例子
    对象间引用赋值及方法时引用传递
    反编译工具reflector破解方法
    使用委托(C# 编程指南)
    委托(C# 编程指南)
    浅谈线程池(下):相关试验及注意事项
    Lambda 表达式(C# 编程指南)
    浅谈线程池(中):独立线程池的作用及IO线程池
    浅谈线程池(上):线程池的作用及CLR线程池
  • 原文地址:https://www.cnblogs.com/dpf-learn/p/6108535.html
Copyright © 2020-2023  润新知