*p++是指下一个地址。
++和*的优先级是一样的,不过它们计算时都是从右向左算的。
扩展资料
C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
优先级等级口诀
圆方括号、箭头一句号, 自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。
其中“,”号为一个等级分段。
参考资料:百度百科-C语言运算符
*P++ :*和++都是同级运算符,右结合。但++要整个表达式运算完了才运算,先提取P指向对象的值,然后P再做++运算,指向下一个对象。*p++的意思就是先取出指针p指向的地址单元的数据,之后再将该值加1。
下面具体区分
1、*p++:只将p加1
2、++p or p++:将p加1
3、++*p:将*p所指单元加1
4、++*p++:将p加1,同时也将*p所指单元加1
扩展资料
*p++先执行++再执行*,分三步
(1)先执行p++,因为是后置,先用p
(2)再执行*p,取p所指的内容
(3)最后再让p++,让p的地址加一个单位
具体的看代码
#include<iostream>
using namespace std;
void main(){
int a[5] = { 2, 4, 5, 8, 9 };
int *p;
p = a;
cout << "p的值为" << p<<endl;
int i=*p++;
cout << i << endl;
cout << "*p++后的p的值为" << p <<endl<< "*p的内容为" << *p;
}
参考资料 百度百科——优先级
*p++就是先取出指针p指向的地址单元的数据,之后再将该值加1。
由于运算符 * 的优先级高于运算符 ++,所以是先取指针p指向的地址单元的数据。
若果是*(p++),那么就是先将地址加1,之后取出新地址中的数据。
在c语言中 ++的优先级大于* i=*p++ 相当于 i=*(p++),又相当于 i=*p; p++; 但并不像bkldhldbk所说"*p++就是:p自身加1后取该指针所指的值" 。
扩展资料:
c语言的优先级的几个情况
优先级反转
由于具有降低优先级的任务长时间占用共享资源,造成申请该资源的优先级最高的进程始终处于等待状态,此时其他比占用资源优先级高但比等待资源进程优先级低的进程将获得处理器的使用权,并先于优先级最高的处于等待状态的进程先结束。
发生的防止
ucos中可以利用互斥型信号量解决上述问题。互斥型信号量创建函数申请一个比使用某共享资源的所有进程中比最高优先级更高的优先级作为预留。
当某个进程调用pend函数申请使用该共享资源,同时该资源已经被占用时,pend函数会判断是否需要提升占用该资源进程的优先级,以使其尽快释放所占用的资源,从而防止优先级反转的发生。
优先级等级
任务的优先级等级与相对截止期、空闲时间之间的层次关系可以用一种线性关系来描述,如:
di+ksj=g
其中,k为线性关系的斜率,g 可以看成是优先级等级。对于确定的斜率k,g 越小,优先级等级越高。比如,对于g1<g2,满足di+ksj=g1的任务优先级要高于满足di+ksj=g2的任务优先级。
参考资料来源:百度百科--C语言
参考资料来源:百度百科--优先级
*p++的意思就是先取出指针p指向的地址单元的数据,之后再将该值加1。
由于运算符 * 的优先级高于运算符 ++,所以是先取指针p指向的地址单元的数据。具体如下:
1、取数组当前位置的值*p;
2、然后,p指向下一位置的数据。
扩展资料:
*p++的使用
*p++等价于:先处理*p,然后在执行p++;举个列子(伪代码)
a[5]={1,2,3,4,5} ;
*p=a ;
for(5)printf *p++;
输出是 1 2 3 4 5,且最后p指向&a【4】+sizeof(元素类型);
*++p等价于:先执行++p,在处理*p;同样举个列子(伪代码)
a[5]={1,2,3,4,5} ;
*p=a ;
for(4)printf *++p;
输出是 2 3 4 5,且最后p指向&a【4】(注意for循环只执行4次)
注:*p(++)语法不对,编译器会报错
*P++ :*和++都是同级运算符,右结合。但++要整个表达式运算完了才运算,先提取P指向对象的值,然后P再做++运算,指向下一个对象。
C语言的特点之一是代码可以写的很精炼。
*p++解析:++先跟p结合,但是因为++后置的时候,本身含义就是先运算后增加1(运算指的是p++整体与前面的*进行运算;增加1指的是p+1),所以实际上*p++符号整体对外表现的值是*p的值,运算完成后p再加1.
所以*p++等同于:*p; p += 1;
举例(伪代码):
a[5]={1,2,3,4,5} ;
*p=a ;
for(5)printf *p++;
输出是 1 2 3 4 5,且最后p指向&a【4】+sizeof(元素类型);
扩展资料:
*++p的使用:
*++p等价于:先执行++p,在处理*p;同样举个列子(伪代码)
a[5]={1,2,3,4,5} ;
*p=a ;
for(4)printf *++p;
输出是 2 3 4 5,且最后p指向&a【4】(注意for循环只执行4次)
参考资料来源:百度百科-指针