C52-二级指针
一 二级(有多级)指针的基本语法
- 概念:二级指针是指向指针的指针,用于存储指针变量的地址。
- 二级指针的定义:二级指针的类型为
int **
、char **
等 - 二级指针的解引用:解引一次得到一级指针的地址,解引两次得到数据本身
二 示例
- 代码示例:
#include <stdio.h>
int main()
{int data=10;int *ptr1=&data;int **ptr2=&ptr1;printf("data的内存地址:%p\n",&data);printf("一级指针的内存地址:%p\n",&ptr1);printf("二级指针的地址:%p\n\n",&ptr2);printf("通过变量名直接访问数据:%d\n",data);printf("测试解引一级指针:%d\n",*ptr1);printf("测试解引一次二级指针:%d\n",*ptr2);printf("以十进制整数输出data的内存地址:%d\n",&data);printf("测试解引两次二级指针:%d\n",**ptr2);return 0;
}
- 成果展示:
- 报错与总结:
定义二级指针时只写了一个*号
三 二级指针实战
- 代码示例:
#include <stdio.h>//封装函数:通过二级指针来存储二维数组里的所需求的一维数组的位置
void GetPositionPerson(int position,int (*pstudent)[4],int **pposition)
{*pposition=(int *)(pstudent+position-1);
}int main()
{int scores[3][4]={{67,68,69,71},{72,74,75,76},{72,61,81,60}};int *pposition;int position;printf("请输入你所查询的学生学号:1,2,3\n");scanf("%d",&position);GetPositionPerson(position,scores,&pposition);for(int i=0;i<4;i++){printf("%d ",*pposition++);}return 0;
}
- 成果展示:
四 二级指针与数组的避坑指南
**二级指针不能简单的指向二维数组 **
- Test for “二级指针=二维数组”
- 代码示例:
#include <stdio.h>
int main()
{int scores[3][4]={{67,68,69,71},{72,74,75,76},{72,61,81,60}};int **ptr=scores;printf("scores的内存地址:%p\n",&scores);printf("ptr的内存地址:%p\n",&ptr);printf("*ptr的内存地址:%p\n\n",*ptr);return 0;
}
- 测试结果: