#include <stdio.h>
int main(void)
{
int a[] = { 1,2,3 };
int b[] = { 4,5,6 };
int c[] = { 7,8,9 };
//指针数组是一个特殊的二维数组模型
//指针数组对应于二级指针
int* arr[] = { a,b,c };
//指针数组和二级指针建立关系
int** p = arr;
//printf("%d\n", **p); //(打印数字1);**p后面没写东西相当于p[0][0]
//二级指针加偏移量相当于跳过了一个一维数组的大小
//printf("%d\",**(p + 1));
//一级指针加偏移量相当于跳过了一个元素
//printf("%d\n", *(*p + 1));//打印数字2
//printf("%d\n", *(*(p + 1) + 1));//打印数字5
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
//以下三条printf语句的功能都是将a[],b[],c[]中的值打印出来
printf("%d ", p[i][j]);
//printf("%d ", *(p[i] + j));
//printf("%d ", *(*(p + i) + j));
}
puts("");
}
return 0;
}
以上代码中的部分语句被我注释掉了,但我已经把它们的功能说得很清楚了,读者可自行调试。
#include <stdio.h>
int main(void)
{
int a = 10;
int* p = &a;
int** pp = &p; //pp二级指针变量的值
//*pp一级指针的值
//**pp变量的值
int b = 20;
**pp = 100;
//*pp = 100; //野指针(error)
printf("%d\n", *p);
printf("%d\n", a);
//三级指针:
/*
int*** ppp = &pp;
*ppp == pp == &p;
**ppp == *pp == p == &a;
***ppp == **pp == *p == a;
*/
return 0;
}
上面的第二个程序的注释也很清晰,这里不再解释。