5个回答
展开全部
第一行:定义主函数(这个你可以看书,不明白为何,就先强记下),
第二行:定义一个叫做a的数组(什么是数组,书上有定义的,该数组最大包含三个元素,初始就给它赋值为10,15,20
第三行:int *p1 = a,这个表示的是定义一个叫p1的指针(指向整数类型),同时赋予初值是a数组的首地址,也就是a[0],(这块的东西刚刚开始学的话有点难度,我之前学的时候,专门去看了门牌号),接下来定义p2指针,初始赋值为a数组中第二个元素(a[1],这是因为数组是从0开始表示位置的)地址
第四行:(这个估计你得画个图看的明白些)首先看右边,先括号里面,表示的是p2的值减去1,(上面p2初始值是a[1]地址,也就是此时p2-1得到的是a[0]的地址)接着是括号外面的星号表示的是取值操作,得到的是a[0]的值,即10,然后10加上2等于12赋给左边的p1所指向的地址,也就是a[0],这么多的操作其实就是改变了a[0]的值,即a[0]=12;
第五行:还是先看右边,先算星号的,表示p1指向的值也就是上述的12,减去4后得到8赋给左边的,左边还是先算括号里面,p1指向的地址加上1,此时表示的是a[1]的地址,然后星号操作,即a[1]=8,
第六行就是输出,注意的是指针指向的内容,此时数组内容为12,8,20,所以输出应该是8,12,8
第二段程序,我建议你自己再看看,最好是自己多多想想,下午有空,就给你打这么多了,不然其他人也不会这样说太多的,因为大家都在忙啊,从你身上看到当年自己的影子,加油吧
第二行:定义一个叫做a的数组(什么是数组,书上有定义的,该数组最大包含三个元素,初始就给它赋值为10,15,20
第三行:int *p1 = a,这个表示的是定义一个叫p1的指针(指向整数类型),同时赋予初值是a数组的首地址,也就是a[0],(这块的东西刚刚开始学的话有点难度,我之前学的时候,专门去看了门牌号),接下来定义p2指针,初始赋值为a数组中第二个元素(a[1],这是因为数组是从0开始表示位置的)地址
第四行:(这个估计你得画个图看的明白些)首先看右边,先括号里面,表示的是p2的值减去1,(上面p2初始值是a[1]地址,也就是此时p2-1得到的是a[0]的地址)接着是括号外面的星号表示的是取值操作,得到的是a[0]的值,即10,然后10加上2等于12赋给左边的p1所指向的地址,也就是a[0],这么多的操作其实就是改变了a[0]的值,即a[0]=12;
第五行:还是先看右边,先算星号的,表示p1指向的值也就是上述的12,减去4后得到8赋给左边的,左边还是先算括号里面,p1指向的地址加上1,此时表示的是a[1]的地址,然后星号操作,即a[1]=8,
第六行就是输出,注意的是指针指向的内容,此时数组内容为12,8,20,所以输出应该是8,12,8
第二段程序,我建议你自己再看看,最好是自己多多想想,下午有空,就给你打这么多了,不然其他人也不会这样说太多的,因为大家都在忙啊,从你身上看到当年自己的影子,加油吧
展开全部
第一题:显示 8,12,8
因为p2-1就是p1,而p1+1就是p2,故a[0]+2->a[0],即a[0]为12
而a[0]-4->a[1],所以a[1]为8,
第二题:显示 8,8,12
因p2--后,p2指向a[0],而p1++后,p1指向a[1],所以
a[0]+2->a[0],即a[0]为12,
a[0]-4->a[1],即a[1]为8
因为p2-1就是p1,而p1+1就是p2,故a[0]+2->a[0],即a[0]为12
而a[0]-4->a[1],所以a[1]为8,
第二题:显示 8,8,12
因p2--后,p2指向a[0],而p1++后,p1指向a[1],所以
a[0]+2->a[0],即a[0]为12,
a[0]-4->a[1],即a[1]为8
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1:
8,12,8
int *p1 = a, *p2 = &a[1]; //p1指向a[0],p2指向a[1];
*p1 = *(p2-1)+2; //*(p2-1)为p2前移一位再取值,其实就是a[0的值,所以为10+2。所以*p1为12
*(p1+1)= *p1-4;//*(p1+1)味a[1] ,所以为12-4为8
前面说了,p2指向a[1];,所以也是8
2。
15,15,13
*p1 = *(p2--)+2;//p2--后其实是p2指向a[0]了,但由于是p2--,所以此时*p1为15+2=17,就是a[0]为17了
*(p1++)= *p1-4;//(p1++)p1指向a[1]了,但由于是p1++,所以先赋值,再指针移动,所以a[0]为17-4=13;
最后期是就是a[3]变成了{13,15,20},p1指向a[1],p2指向a[0]
8,12,8
int *p1 = a, *p2 = &a[1]; //p1指向a[0],p2指向a[1];
*p1 = *(p2-1)+2; //*(p2-1)为p2前移一位再取值,其实就是a[0的值,所以为10+2。所以*p1为12
*(p1+1)= *p1-4;//*(p1+1)味a[1] ,所以为12-4为8
前面说了,p2指向a[1];,所以也是8
2。
15,15,13
*p1 = *(p2--)+2;//p2--后其实是p2指向a[0]了,但由于是p2--,所以此时*p1为15+2=17,就是a[0]为17了
*(p1++)= *p1-4;//(p1++)p1指向a[1]了,但由于是p1++,所以先赋值,再指针移动,所以a[0]为17-4=13;
最后期是就是a[3]变成了{13,15,20},p1指向a[1],p2指向a[0]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1,
3 int main(void){
4 int a[3]={10,15,20};
5 int *p1=a,*p2=&a[1]; //此时p1指向10,p2指向15
6 *p1=(*p2-1)+2;//(*p2-1)=14,再加2后,p1=16
7 *(p1+1)=*p1-4;//*p1-4=12,把12的值付给*(p1+1),而此时*(p1+1)指向的是原来15的地址,所以数组第二个元素被赋值成12了,此时数组a内的元素为16,12,20,所以之前指向第二个元素的p2=12,所以a[1]=12,*p1=16,*p2=12
8 printf("%d %d %d \n",a[1],*p1,*p2);
9
10 }
3 int main(void){
4 int a[3]={10,15,20};
5 int *p1=a,*p2=&a[1]; //此时p1指向10,p2指向15
6 *p1=(*p2-1)+2;//(*p2-1)=14,再加2后,p1=16
7 *(p1+1)=*p1-4;//*p1-4=12,把12的值付给*(p1+1),而此时*(p1+1)指向的是原来15的地址,所以数组第二个元素被赋值成12了,此时数组a内的元素为16,12,20,所以之前指向第二个元素的p2=12,所以a[1]=12,*p1=16,*p2=12
8 printf("%d %d %d \n",a[1],*p1,*p2);
9
10 }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *p1=a,*p2=&a[1];
表示指针p1指向数组a的首地址即a[0]的地址,指针p2指向a[1]的地址
*p1=*(p2-1)+2;
*p1表示a[0]的值,(p2-1)表示a[1]的地址减一位,即a[0]的地址,*(p2-1)表示a[0]的值
所以上式可为a[0]=a[0]+2; 即a[0]=12;
*(p1+1)=*p1-4;
*(p1+1)表示a[1]的值(参照上面的分析),即a[1]=a[0]-4,所以a[1]=12-4=8;
a[1]=8;*p1即a[0]=12,*p2即a[1]=8
输出结果为8,12,8
这是第一题
第二题
p2--是先用再减,即处理完式子1后再减
所以a[0]=a[1]+2=17,然后p2的值减1,即p2和p1一样指向a【0】
第二个式子p1++,同理,a[0]=a[0]-4=13,p1再增加一,即p1指向a【1】
所以结果为15,15,13
表示指针p1指向数组a的首地址即a[0]的地址,指针p2指向a[1]的地址
*p1=*(p2-1)+2;
*p1表示a[0]的值,(p2-1)表示a[1]的地址减一位,即a[0]的地址,*(p2-1)表示a[0]的值
所以上式可为a[0]=a[0]+2; 即a[0]=12;
*(p1+1)=*p1-4;
*(p1+1)表示a[1]的值(参照上面的分析),即a[1]=a[0]-4,所以a[1]=12-4=8;
a[1]=8;*p1即a[0]=12,*p2即a[1]=8
输出结果为8,12,8
这是第一题
第二题
p2--是先用再减,即处理完式子1后再减
所以a[0]=a[1]+2=17,然后p2的值减1,即p2和p1一样指向a【0】
第二个式子p1++,同理,a[0]=a[0]-4=13,p1再增加一,即p1指向a【1】
所以结果为15,15,13
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询