c语言中指针*p++为什么和*(p++)等价?38
发布网友
发布时间:2023-10-15 04:05
我来回答
共5个回答
热心网友
时间:2023-11-18 15:16
p++ 是后缀加加,C/C++规定,后缀加加,在当前表达式中 不自增1,而用原来的值,出了表达式后再自增 1.
不同于前缀加加。前缀加加 ++p 的话,先增1,然后用于表达式,出了表达式就不再自增。
所以,x= *(p++) 就等于 x=*(p); 或 x=*p; 执行完毕后 再 做 p=p+1.
x= *p++ 里是 后缀加加, 当前表达式中 不自增1, 所以它就等价于 *p.
热心网友
时间:2023-11-18 15:16
第一个问题答案:首先*p++中*(取值)的优先级和++是同一优先级的,*( 取值)和++是从右往左结合的,即在执行语句*p++时,是从右往左执行的,所以*p++和*(p++)等价;
第二个问题答案:
就是楼上金色潜鸟回答的,p++做表达式变量时,在表达式中先使用p的值,等做完表达式之后p的值再+1;如果是++p的话就是先自+1,再参与表达式的计算。
记住一个公式好了,++在前,先自加再运算。++在后,先运算再++
热心网友
时间:2023-11-18 15:16
因为单目运算符++(自增运算)和*(这里的*是指针运算符而不是乘法运算符),它们的优先级别是同一级的,这一级的结合顺序自右向左,所有,*p++,先运行p++,后执行*运算符。
详细情况可以看一下运算符号优先级详情。
热心网友
时间:2023-11-18 15:17
*和++具有相等的优先级,但它在结合时是从右向左进行的,p++在C中是先使用p后加1的,所以
*(p++) == (x = *p,p = p+1)
热心网友
时间:2023-11-18 15:18
子表达式p++的值总是p自增前的值,这是C语言的规定
c语言中指针*p++为什么和*(p++)等价?
p++ 是后缀加加,C/C++规定,后缀加加,在当前表达式中 不自增1,而用原来的值,出了表达式后再自增 1.不同于前缀加加。前缀加加 ++p 的话,先增1,然后用于表达式,出了表达式就不再自增。所以,x= *(p++) 就等于 x=*(p); 或 x=*p; 执行完毕后 再 做 p=p+1.x= *p++...
C语言中 *p++和 *(p++)是等价的吗 为什么
是等价的。是取值运算符,++是后置自加运算符。++的结合性要比*强,所以无论是*p++,还是*(p++)都是p与++结合。即先去p上的值,再将指针p自加。要让++与*p结合,需要使用 (*p)++ 这样是先取*p的值,然后把*p自加。
c语言中,p为指针,那么*p和&p是一样的吗,什么区别
在声明指针变量的时候,*p表示声明p是指针变量,比如int *p(声明p为int型指针变量);在调用指针变量的时候,*p表示指针变量p所指向的变量的值,比如int a=5,b; int *p;(声明p为int型指针变量),p=a; b=*p;(把p所指向的变量的值,即a的值赋给变量b)。对于&p,则是代表变量p的地址...
c语言,p是指针,如何理解 !p 等价于 (p==null)
!p表示p为真是表达式为假,p为假是表达式为真
C语言中(*p)和*(*P)的含义是什么?
操作符,就是操作其后表达式所在地址的值,可以读,也可以写 还可以作为乘法运算符 还可以用来声明指针变量 这个要看具体情况 int a=6;int *p=&a; //这里的*p只是定义p为指针的意思 //*p 其实就相当于a printf("%d", *p);//输出6 p=5; //结果是a也等于5 int (*p)(int a, int b...
C语言问题*p与(*p)的区别
double *p(int, int*) //这个是声明一个函数,此函数返回双精度浮点型指针,有两个参数,分别是整型和整型指针 double (*p)(int, int*) //这是声明一个指针,此指针是一个函数指针,指向一个函数,这个函数有两个参数:整型数和整型数指针;返回值是双精度浮点型数 ...
c语言中指针p与*p的问题
例2里面的*q=&b; 等效于 int *q; q=&b; 两条语句 q是指针,指向了b的地址,*q是该地址的内容,也就是b的数值,所以 *q和 b是等价的
c语言指针问题,输入函数中*p和p的区别
用scanf("%d",&a)是将数存入一个空间地址,而pa已经是一个地址,所以可以直接写出scanf( "%d%d", pa, pb);
C语言指针*p与p有什么区别?printf输出表列要哪个?为什么?
声明为指针以后,“语句”里,出现 *p, 表示 是 数值,出现 p, 表示 是 地址。int a=5;int *p=&a; printf("%d", *p); // 打印 数值 5 如果 写 printf("%d", p); 不带星号的,则是 a的地址。
c语言指针*p和p
需要说明的是 p=&k;这种赋值方式是错误的;p为指针变量,它的作用是指向的是k在内存中的地址,而不能给他本身赋值;若需k的地址,则可直接用p=&k;printf("%d",p);你的问题补充令人费解,不知你说的pk,pm,为何物...