*p++ 和 (*p)++ 一样吗?
*p++ 和 (*p)++ 一样吗?
[解决办法]
不一样,结合顺序问题。
[解决办法]
*p++ == *(p++)
[解决办法]
不一样的。
*p++ :先对指针p解引用,就是求*p,然后对指针自增,即p++;
(*p)++ :先求*p,然后将括号里的当成一个整体,即*p,对*p自增,求*p++;
[解决办法]
不一样的,结合顺序不一样。
[解决办法]
3楼+1
他们的相同点是 最后取出的值都是一样,都是*p
不同的是 *p++ 在取值之后 p的指针执行自增,往后移动一个单元
而 (*p++) p没有移动 而是*p的值自增了1
[解决办法]
之前看过一本书,直接把后缀++ --放第一级的。
K&R里面是把后缀++ --放第二级。
仔细想想,第二级里面的运算符都是单目运算符,除了后缀++ --,其他都得搁变量左边。而第二级的结合性都是从右向左,这样的话 ++ -- 自然高出同级别其他运算符了。
[解决办法]
- C/C++ code
*p++ 是先++ 然后在解引用(*p)++ 是先解引用,在++
[解决办法]
15楼说的是对的。
void main()
{
int s;
int x[5];
int *p;
for(s=0;s<5;s++)
{
x[s] = 3*s;
}
p = &x[2];
//printf("%d %d\n",*p++,(*p)++ );
//printf("%d \n",*p++);
printf("%d \n",(*p)++ );
}
printf("%d \n",*p++);
printf("%d \n",(*p)++ );
二者单独打印出来都是6,验证了这个说法的正确性
但是如果使用printf("%d %d\n",*p++,(*p)++ );
大家猜猜结果又是多少
[解决办法]
不一样的。
*p++为*(p++)
[解决办法]
一个是指针运算 一个是数值运算
[解决办法]
不一样的
#include <stdio.h>
void main()
{
int p1[] = {1, 3, 5, 7 ,9};
int *p = p1;
*p++;
printf("*p++ = %d\n", *p);//结果为3 (++优先级比*高)先p++后p指针此时指向p1[1]=3出,再*P取值操作即把3取出
int p2[] = {1, 3, 5, 7 ,9};
p = p2;
(*p)++;
printf("(*p)++ = %d\n", *p);//结果为2 先取值操作此时*p=1 然后再++操作即执行1+1=2 即为最后结果
return;
}
[解决办法]
不一样;
建议你看看那个运算顺序
[解决办法]
这个问题好像没啥疑问吧、咋都盖了20几层楼。。
++*p 和 (*p)++ 等价的。
像*和++等一元运算符是从右至左的结合顺序
[解决办法]
[解决办法]
是这样的。
[解决办法]
*p++ == *(p++)
*与++ 优先级一样,所以是自右向左的算法,
先执行*P,再执行p++即p的地址加1.
(*p)++ 先执行*p,然后对p 指向的内容加1、
p++是对地址加1,(*p)++是对指针指向的内容加1
[解决办法]
[解决办法]
虽然结果一样但运算类型不同,一个是指针向后移一位,一个是指针中的数值自加一。
[解决办法]
[解决办法]
[解决办法]
这个就涉及到了所谓的表达示求值问题了,在C++中既可作左值,也可作右值,不知道C++11的标准是怎么样的……
[解决办法]
不一样
[解决办法]
因为++和*的优先级相同,结合性是自右至左
所以*p++先运算p++再进行;*p运算,因为是后++所以*p是当前值,下一条语句后p指向后一个地址
(*P)++是先运算*p然后再对*p的值进行+1
[解决办法]
不一样,要考虑优先级和结合性
*p++ == *(p++)
[解决办法]
++和*的优先级相同,结合性是自右至左,所以*p++是先结合后边相当于*(p++),而p代表一个地址,所以是p所指向的一个地址先加一,然加上*号,取这个新地址的值。
而(*p)++是指还是原来p对应的老地址中的值加1.希望我的解释对你能有理解。
[解决办法]
肯定不一样啊,*p++先p++,再取值,此时p指向了下一个;
(*P)++是把值直接加1;
[解决办法]
要是自己写代码不确定的时候加上括号吧
[解决办法]
结合顺序不一样,至右向左结合。
[解决办法]
[解决办法]
肯定不一样啦。。。你打印出来就知道了。。。
[解决办法]
运算符的结合顺序很多,所以呀写代码的时候,尽量不要省略括号,这样运算顺序一目了然,要不然那天记错了哭的是自己
[解决办法]
他俩是同级的,但是是自由想左,所以感觉像是有优先级之分而已
[解决办法]
[解决办法]
一个是指针加,一个是指针指向的内容加