记录一些平常可能用到的指针例子
#include<stdio.h>
int main()
{
//------------------------------------- No.1
char array[4] = "a01";
//------------------------------------- No.2
char array1[3][4] = {"a01","a02","a03"},
array2[3][4] = {"b01","b02","b03"},
array3[3][4] = {"c01","c02","c03"};
char *array4[4] = {"a01","a02","a03","a04"}; //定义了一个数组,包含4个char型指针(每个指针初始化一块静态内存) 【指针数组】
//------------------------------------- No.3
char array5[2][3][4] = {
{"a01","a02","a03"},
{"b01","b02","b03"}
};
char *array6[3][4] = { //定义了一个 3x4的矩阵,每个元素都是 char 型指针
{"a01","a02","a03","a04"},
{"b01","b02","b03","b04"},
{"c01","c02","c03","c04"}
};
//------------------------------------- No.4
char *p1=NULL,*p2=NULL,*p3=NULL,*p4=NULL;
char **array7[4] = {&p1,&p2,&p3,&p4};
char **array8[2][2] = {
{&p1,&p2},
{&p3,&p4}
};
//------------------------------------- No.1
puts(array);
char *p;
p = array;
puts(p); // a01
p++; // 指针p的步长为 1
puts(p); // 01
//------------------------------------- No.2
puts(array1[0]); // a01
char (*p)[4]; //定义了一个 char型数组(长度为4)的指针 【数组指针】
p = array1;
puts(p[0]); // a01
p++; // 指针p的步长为 4
puts(*p); // a02
char *p;
p = array1[1];
puts(p);
//-----------------
char (*p[3])[4]; //定义了三个 char 型数组(长度为4)的指针 / 定义了 char 型数组(长度为4)的指针的数组 【数组指针数组】
p[0] = array1;
p[1] = array2;
p[2] = array3;
puts(p[1][2]); // b03
//-----------------
puts(array4[1]); // a02
char **p; // char 型指针的指针
p = array4;
puts(p[1]); // a02
p += 3; // 指针p的步长为 4
puts(*p); // a04
//------------------------------------- No.3
puts(array5[0][1]); // a02
char (*p)[3][4]; // char 型二维数组(3x4)的指针
p = array5;
puts(p[0][0]); // a01
p++;
puts((*p)[1]); // b02
// (*p)++; // 错误,p是变量,可以进行赋值运算,而 (*p)是地址值,不可进行赋值运算
puts(*((*p)+2)); // b03
//-----------------
puts(array6[2][3]); // c04
char *(*p)[4]; // char型数组(长度为4)的指针的指针 【数组指针指针】
p = array6;
puts(p[1][2]); // b03
//------------------------------------- No.4
char ***p;
p = array7;
//-----------------
char **(*p)[2];
p = array8;
return 0;
}