C语言的一个小小的PROBLEM
(1)#include"stdio.h"main(){inta[2]={1,9},*p=a;printf("%d,",(*p)++);printf("%d,",*p);}...
(1)#include"stdio.h"
main()
{int a[2]={1,9},*p=a;
printf("%d,",(*p)++);
printf("%d,",*p);
}
结果是1,2
(2)#include"stdio.h"
main()
{int a[2]={1,9},*p=a;
printf("%d,",*(p++));
printf("%d",*p);
}
结果是1,9
请问是不是考虑这个问题的结果的时候++这个运算可以先去掉不看(2个程序第一个的输出结果都是1),得出结果之后再把++放回来看++运算在哪里了,是地址还是内容++了,可以这样想吗?可是既然括号的优先级最高为什么第二个程序结果不是9,9呢? 展开
main()
{int a[2]={1,9},*p=a;
printf("%d,",(*p)++);
printf("%d,",*p);
}
结果是1,2
(2)#include"stdio.h"
main()
{int a[2]={1,9},*p=a;
printf("%d,",*(p++));
printf("%d",*p);
}
结果是1,9
请问是不是考虑这个问题的结果的时候++这个运算可以先去掉不看(2个程序第一个的输出结果都是1),得出结果之后再把++放回来看++运算在哪里了,是地址还是内容++了,可以这样想吗?可是既然括号的优先级最高为什么第二个程序结果不是9,9呢? 展开
展开全部
(*p)++是里面的值递增了
*p++,*(p++)是一样的效果,++的优先级大于*的
为什么第二个程序结果不是9,9
*(p++)这个表达式返回*p的值,在把p加1
printf函数得到是一个临时的值
*p++,*(p++)是一样的效果,++的优先级大于*的
为什么第二个程序结果不是9,9
*(p++)这个表达式返回*p的值,在把p加1
printf函数得到是一个临时的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*(p++)
指针指向的地址变了,指向了a[1]
指针指向的地址变了,指向了a[1]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个程序 (*p)++ 是使得a中第一个元素自加了 也就是1+1=2了
printf("%d,",*p);这条语句p所指向的数据始终是a中第一个数据
第二个程序*(p++) 是使得p指向下一个元素 也就是说printf("%d",*p);这条语句的p已将指向a中第二个元素了 也就是9
所以 第二个程序*(p++) 是地址++了
printf("%d,",*p);这条语句p所指向的数据始终是a中第一个数据
第二个程序*(p++) 是使得p指向下一个元素 也就是说printf("%d",*p);这条语句的p已将指向a中第二个元素了 也就是9
所以 第二个程序*(p++) 是地址++了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
++,自加运算符,a=p++就是 先进行a=p的赋值计算,完了之后再p加上1。
这里(*p)++,是先取地址p的值进行打印,然后值+1,下次用的时候就是值+1后的内容了。
*(p++),是先将地址p的值打印,然后地址+1,下次用的时候就是地址+1后的内容了。
这里有无()的区别在于取p的值进行自加还是取p的地址进行自加。
这里(*p)++,是先取地址p的值进行打印,然后值+1,下次用的时候就是值+1后的内容了。
*(p++),是先将地址p的值打印,然后地址+1,下次用的时候就是地址+1后的内容了。
这里有无()的区别在于取p的值进行自加还是取p的地址进行自加。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来说两句。
先说明 *p=a;a 是数组名,*p实际上指向数组a[2]的首地址(数组名其实是一个指针,指向数组的首地址),其实也就是指向数组元素a[0],
1中,(*p)++ 等效于 a[0]++ 先使用再自加,所以先输出a[0](即为1)
再输入a[0]自加后的值,即为2
2中,*(p++) p是指向数组a的地址,先使用再自加,刚先输出*p,即a[0](值为
1),然后,p指向的地址往后挪一个字节,这时第二句输出时,*p指向的已经不是a[0]了,而是a[1]了,也就是9.
不知道有没有说明白。
先说明 *p=a;a 是数组名,*p实际上指向数组a[2]的首地址(数组名其实是一个指针,指向数组的首地址),其实也就是指向数组元素a[0],
1中,(*p)++ 等效于 a[0]++ 先使用再自加,所以先输出a[0](即为1)
再输入a[0]自加后的值,即为2
2中,*(p++) p是指向数组a的地址,先使用再自加,刚先输出*p,即a[0](值为
1),然后,p指向的地址往后挪一个字节,这时第二句输出时,*p指向的已经不是a[0]了,而是a[1]了,也就是9.
不知道有没有说明白。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询