数组指针/指针数组的使用
#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) 编辑 收藏 举报