为了账号安全,请及时绑定邮箱和手机立即绑定

请教一个c语言指针的题目

请教一个c语言指针的题目

噜噜哒 2019-04-09 20:24:55
请帮忙解释:#includevoidg(int**p){(**p)++;(*p)++;}intmain(intargc,char*argv[]){intline[10],i;int*p=line;for(i=0;i
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

这也没什么吧,line[0]=0,然后在g函数里,line[0]被++,同时这个p向前指向了line[1],然后line[1]=1,在g函数里,line[1]被++,同时这个p向前指向了line[2],...
                            
查看完整回答
反对 回复 2019-04-09
?
当年话下

TA贡献1890条经验 获得超9个赞

首先你要理解什么是一级指针,什么是二级指针
一级指针储存的就是某个变量的地址
而二级指针就是存储一级指针的地址
假设定义一个二级指针
inta=5;
int*p=&a;
int**pp=&p;
解引一次
*pp
是指向一级指针的地址,即*pp和&p是等价的
解引两次
**pp
是一个变量的值,即**p和a是等价的
那么我们来看一下你的程序
*p=i;
g(&p);
第一次执行的时候p是指向line[0]的地址
所以第一个语句等价line[0]=0;
然后是执行g(&p)
这一句就相当于把p的地址传给g()函数,所以g()函数使用了一个二级指针来接受这个变量
最后看一下g()函数
voidg(int**p)
{
(**p)++;
(*p)++;
}
开始已经说了**p是指向变量的值
所以第一句等价line[0]++;即line[0]的值变为1
而*p是指向一级指针的地址
这一句就等价于p++,那么这时候p就变成指向line[1]的地址了
以上一轮结束以后
再次进入main()函数里面的for循环
就等价(第二次执行for循环里面的语句)
line[1]=1;
g(&line[1]);
就是这样子一直循环10遍
所以最后打印的结果是1至10
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信