




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指向指针的指针变量指向指针的指针变量/NUMPAGES10指向指针的指针变量指向指针的指针变量一个指针变量可以指向整型变量、实型变量、字符类型变量,当然也可以指向指针类型变量。当这种指针变量用于指向指针类型变量时,我们称之为指向指针的指针变量,这话可能会感到有些绕口,但你想到一个指针变量的地址就是指向该变量的指针时;这种双重指针的含义就容易理解了。下面用一些图来描述这种双重指针,见图6-13。
在图中,整型变量i的地址是&i,将其传递给指针变量p,则p指向i;实型变量j的地址是&j,将其传递给指针变量p,则p指向j;字符型变量ch的地址是&ch,将其传递给指针变量p,则p指向ch;整型变量x的地址是&x,将其传递给指针变量p2,则p2指向x,p2是指针变量,同
时,将p2的地址&p2传递给p1,则p1指向p2。这里的p1就是我们谈到的指向指针变量的指针变量,即指针的指针。
指向指针的指针变量定义如下:
类型标识符**指针变量名
例如:float**ptr;
其含义为定义一个指针变量ptr,它指向另一个指针变量(该指针变量又指向一个实型变量)。由于指针运算符“*”是自右至左结合,所以上述定义相当于:
float*(*ptr);
下面看一下指向指针变量的指针变量怎样正确引用。
[例6-27]用指向指针的指针变量访问一维和二维数组。
#include
#include
main()
{
inta[10],b[3][4],*p1,*p2,**p3,i,j;/是*p指3向指针的指针变量*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);/*一维数组的输入*/
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&b[i][j]);/*二维数组输入*/
for(p1=a,p3=&p1,i=0;i<10;i++)
printf("M",*(*p3+i));/*用指向指针的指针变量输出一维数组*/
printf("\n");来源:m
for(p1=a;p1-a<10;p1++)/*用指向指针的指针变量输出一维数组*/
{
p3=&p1;
printf("M",**p3);
}
printf("\n");
for(i=0;i<3;i++)/*用指向指针的指针变量输出二维数组*/
{
p2=b[i];
p3=&p2;
for(j=0;j<4;j++)
printf("M",*(*p3+j));
printf("\n");
}
for(i=0;i<3;i++)/*用指向指针的指针变量输出二维数组*/
{
p2=b[i];
for(p2=b[i];p2-b[i]<4;p2++)
{
p3=&p2;
printf("M",**p3);
}
printf("\n");
}
}
程序的存储示意如图6-14所示,对一维数组a来说,若把数组的首地址即数组名赋给指针变量p1,p1就指向数组a,数组的各元素用p1表示为,*(p1+i),也可以简化为*p1+i表示。同样,对二维数组b来说,b[i]表示第i行首地址,将其传递给指针变量p2,使其指向该行。
该行的元素用p2表示为*(p2+i)。若作p3=&p2,则表示p3指向p2,用p3表示的二维数组第i行元素为:*(*p3+i)。这与程序中的表示完全相同。
运行程序:
[例6-28]利用指向指针的指针变量对二维字符数组的访问。
#include
#include
main()
{
inti;
staticcharc[][16]={"clanguage","fox","computer","homepage"};
/*二维字符数组*/
staticchar*cp[]={c[0],c[1],c[2],c[3]};指/*针数组*/
staticchar**cpp;/*指向字符指针的指针变量*/
cpp=cp;/*将指针数组的首地址传递给指向字符指针的指针变量*/
for(i=0;i<4;i++)/*按行输出字符串*/
printf("%s\n",*cpp++);
printf("\n");
for(i=0;i<4;i++)/*按行输出字符串*/
{
cpp=&cp[i];
printf("%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教学资源整合与秋季应用计划
- 2025年贵金属靶材项目发展计划
- 2025年面板封接玻璃合作协议书
- 2025年工业清洗清理设备:工业吸尘设备合作协议书
- 2025年电商大数据项目发展计划
- 强化互动反馈的按钮动画设计
- 小学生励志成长故事读后感
- 基因检测技术研发合同
- 2025年制动气室项目发展计划
- 智慧城市规划与建设协议
- 2025年度民政局离婚协议书范本模板官方修订2篇
- 《百达翡丽名表介绍》课件
- 2025版《VOCs废气处理设施安全检查表》(全)
- JJF(京) 92-2022 激光标线仪校准规范
- 整形医院客户管理培训
- 七年级语文下册全册完整课件(部编版)
- 普惠金融政策解读
- 2024年疾控中心支部工作计划范本
- (投资管理)对外投资合作国别(地区)指南
- 砌筑工的培训
- 清洗卫生间(课件)三年级下册劳动人民版
评论
0/150
提交评论