#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[0])); // 5 ----> 计算数组空间 printf("%s\n", a[1]); // FGHIJKLMNOPQRS printf("%s\n", a[1] + 3); // IJKLMNOPQRS printf("%c\n", *(a[1]) + 3); // I /*------------------------------------------------------------------------- 数 组 指 针 操 作 示 意 图 *(p[0]) *(p[0])+3 || || \/ \/ p 或 p[0] -----> A B C D E *(p[1]) *(p[1])+3 || || \/ \/ p+1 或 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)); // 20 ----> 计算数组空间 printf("%d\n", sizeof(b[0])); // 4 ----> 计算指针空间 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 || || \/ \/ p[0] -----> 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 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; }
原文:http://www.cnblogs.com/1203ljh/p/4733220.html