2017两学一做竞赛网站,网站制作详细报价表,专业的网站设计建设,网站建设与管理教学视频目录 15.二级指针 *定义 *演示 16.三级以及多级指针 *三级指针的定义 *多级指针的定义 17.指针数组 *定义 *代码 18.指针数组模拟二维数组 往期推荐 15.二级指针 *定义
之前讲的指针全是一级指针
int a 1;
int *pa a;//一级指针
如果写成
int a 1;
int *pa a… 目录 15.二级指针 *定义 *演示 16.三级以及多级指针 *三级指针的定义 *多级指针的定义 17.指针数组 *定义 *代码 18.指针数组模拟二维数组 往期推荐 15.二级指针 *定义
之前讲的指针全是一级指针
int a 1;
int *pa a;//一级指针
如果写成
int a 1;
int *pa a;//pa是一级指针
int** ppa pa;//ppa是二级指针二级指针定义指向存储一级指针地址的指针
其实在这篇文章已经提前铺垫过了41.【C语言之外】聊聊Cheat Engine官方教程步骤6的思考
*演示
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
int main()
{int a 1;int* pa a;//pa是一级指针int** ppa pa;//ppa是二级指针return 0;
}
命名的含义ppa--point pa--point point pa)
x86环境下F11逐语句执行运行到return 0;
打开监视窗口 现从ppa查到a
查看内存输入ppa bc f8 8f 00 --倒着写--00 8f f8 bc--008ff8bc--是pa的结果
pa中存储着a的地址 c8 f8 8f 00--倒着写--00 8f f8 c8--是a的结果 01 00 00 00--倒着写--00 00 00 01--是变量a的值
可以想到下面代码打印结果
printf(%d,**ppa);//二级指针需要两次解引用因此要带两个*
就是a的值1 16.三级以及多级指针
*三级指针的定义
类比二级指针可以推出三级指针的定义指向存储二级指针地址的指针如int*** ppappa;
*多级指针的定义
同理推出多级指针定义n级指针是指向存储(n-1)级指针地址的指针
17.指针数组
*定义
回忆整型数组的定义:存放整型的数组
所以指针数组的定义存放指针地址的数组
*代码
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
int main()
{int a 1;int b 2;int c 3;int* arr[] { a,b,c };for (int i 0; i 3; i){printf(%p\n, arr[i]);//打印指针数组}return 0;
} DC-D0C,D0-C4C--连续存放
18.指针数组模拟二维数组
*代码
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
int main()
{int arr1[] { 1,2,3,4 };int arr2[] { 5,6,7,8 };int arr3[] { 9,10,11,12 };//数组名即代表数组首元素的地址int* arr[] { arr1,arr2,arr3 };for (int i 0; i 3; i){for (int j 0; j 4; j){printf(%d , arr[i][j]);}printf(\n);}return 0;
} *分析
上方代码并没有创建二维数组但是却依靠指针数组模拟出二维数组可以按照二维数组的形式arr[i][j])来访问
注意arr[i][j]等同于*(*(arri)j)
(二维数组文章13.5.【C语言】二维数组) 往期推荐
19.【C语言】指针重难点A
37.【C语言】指针重难点B
38.【C语言】指针重难点C)
39.【C语言】指针重难点D
40.【C语言】指针重难点E