数组指针/指针数组的使用

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

#define M 4
#define N 5

int main()
{
    int m = 4, n = 5;
    char arr[4][5] = {
        {'A','B','C','D','E'},
        {'F','G','H','I','J'},
        {'K','L','M','N','O'},
        {'P','Q','R','S','\0'}
    };

    char (*a)[N];                                 // a:指针
    a = arr;
    printf("%d\n", sizeof(a));                    // 4 ----> 计算指针空间
    printf("%d\n", sizeof(a+1));                  // 4 ----> 计算指针空间
    printf("%d\n", sizeof(*(a+1)));               // 5 ----> 计算数组空间

    printf("%s\n", a+1);                          // FGHIJKLMNOPQRS
    printf("%s\n", *(a+1) + 3);                   // IJKLMNOPQRS
    printf("%c\n", *(*(a+1) + 3));                // I

    /*-------------------------------------------------------------------------
                         数 组 指 针 操 作 示 意 图


                                *p        *p+3
                                ||         ||
                                \/         \/
                       p -----> A   B   C   D   E


                              *(p+1)    *(p+1)+3
                                ||         ||
                                \/         \/
                     p+1 -----> F   G   H   I   J

                                K   L   M   N   O

                                P   Q   R   S   T

    --------------------------------------------------------------------------------------------------------------*/



    char * b[N];                                  // b:数组
    for(int i = 0; i < m; i++)
        b[i] = arr[i];
    printf("%d\n", sizeof(b[0]));                 // 4  ----> 计算指针空间
    printf("%d\n", sizeof(*(b[0])));              // 1  ----> 计算字符空间

    printf("%s\n", b[1]);                         // FGHIJKLMNOPQRS
    printf("%s\n", b[1] + 3);                     // IJKLMNOPQRS
    printf("%c\n", *(b[1] + 3));                  // I

    /*-------------------------------------------------------------------------
                         指 针 数 组 操 作 示 意 图


                               p[0]      p[0]+3
                                ||         ||
                                \/         \/
                                A   B   C   D   E


                               p[1]      p[1]+3
                                ||         ||
                                \/         \/
                                F   G   H   I   J

                                K   L   M   N   O

                                P   Q   R   S   T

    --------------------------------------------------------------------------------------------------------------*/



    char arr2[6] = {'A', 'B', 'C', 'D', 'E', '\0'};
    char *c = arr2;
    printf("%s\n", c);                            // ABCDE
    printf("%s\n", c + 3);                        // DE
    printf("%c\n", *c);                           // A
    printf("%c\n", c[3]);                         // D
    printf("%c\n", *(c+3));                       // D

    /*-------------------------------------------------------------------------
                         普 通 指 针 操 作 示 意 图


                            *c                   *(c+3)
                            ||                     ||
                            \/                     \/
                  (c)-----> A   B   C  (c+3)-----> D   E

    --------------------------------------------------------------------------------------------------------------*/
    return 0;
}

 

posted on 2015-08-15 21:56  huashunli  阅读(1143)  评论(0编辑  收藏  举报

导航