猿问

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

请帮忙解释:
#include
voidg(int**p)
{
(**p)++;
(*p)++;
}
intmain(intargc,char*argv[])
{
intline[10],i;
int*p=line;
for(i=0;i<10;i++){
*p=i;
g(&p);
}
for(i=0;i<10;i++)
printf("%d\n",line[i]);
return0;
}
为什么输出结果为:
1
2
3
4
5
6
7
8
9
10
噜噜哒
浏览 345回答 2
2回答

慕雪6442864

这也没什么吧,line[0]=0,然后在g函数里,line[0]被++,同时这个p向前指向了line[1],然后line[1]=1,在g函数里,line[1]被++,同时这个p向前指向了line[2],...

当年话下

首先你要理解什么是一级指针,什么是二级指针一级指针储存的就是某个变量的地址而二级指针就是存储一级指针的地址假设定义一个二级指针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
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答