*p++ 跟 (*p)++ 一样吗
*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里面是把后缀++ --放第二级。
仔细想想,第二级里面的运算符都是单目运算符,除了后缀++ --,其他都得搁变量左边。而第二级的结合性都是从右向左,这样的话 ++ -- 自然高出同级别其他运算符了。
------解决方案--------------------
------解决方案--------------------
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)++ 等价的。
像*和++等一元运算符是从右至左的结合顺序
------解决方案--------------------
+1
------解决方案--------------------
是这样的。
------解决方案--------------------
*p++ == *(p++)
*与++ 优先级一样,所以是自右向左的算法,
先执行*P,再执行p++即p的地址加1.
(*p)++ 先执行*p,然后对p 指向的内容加1、
p++是对地址加1,(*p)++是对指针指向的内容加1
------解决方案--------------------
说的对
------解决方案--------------------
虽然结果一样但运算类型不同,一个是指针向后移一位,一个是指针中的数值自加一。
------解决方案--------------------
*p++值因为为1;
//*p++
int result = *p++,可以理解为:
int* ptmp = p;
p++;
result = *ptmp;
//*++p
int result = *++p可以理解为:
++p;
*p;
//(*p)++
int result = (*p)++可以理解为:
result = *p;
result++;
为了便于理解,最好用()来定义优先级,代码会清楚点
------解决方案--------------------
++
------解决方案--------------------
这个就涉及到了所谓的表达示求值问题了,在C++中既可作左值,也可作右值,不知道C++11的标准是怎么样的……
*p++ 和 (*p)++ 一样吗?
------解决方案--------------------
不一样,结合顺序问题。
------解决方案--------------------
*p++ == *(p++)
------解决方案--------------------
不一样的。
*p++ :先对指针p解引用,就是求*p,然后对指针自增,即p++;
(*p)++ :先求*p,然后将括号里的当成一个整体,即*p,对*p自增,求*p++;
------解决方案--------------------
不一样的,结合顺序不一样。
------解决方案--------------------
3楼+1
他们的相同点是 最后取出的值都是一样,都是*p
不同的是 *p++ 在取值之后 p的指针执行自增,往后移动一个单元
而 (*p++) p没有移动 而是*p的值自增了1
------解决方案--------------------
之前看过一本书,直接把后缀++ --放第一级的。
K&R里面是把后缀++ --放第二级。
仔细想想,第二级里面的运算符都是单目运算符,除了后缀++ --,其他都得搁变量左边。而第二级的结合性都是从右向左,这样的话 ++ -- 自然高出同级别其他运算符了。
------解决方案--------------------
*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)++ 等价的。
像*和++等一元运算符是从右至左的结合顺序
------解决方案--------------------
+1
------解决方案--------------------
是这样的。
------解决方案--------------------
*p++ == *(p++)
*与++ 优先级一样,所以是自右向左的算法,
先执行*P,再执行p++即p的地址加1.
(*p)++ 先执行*p,然后对p 指向的内容加1、
p++是对地址加1,(*p)++是对指针指向的内容加1
------解决方案--------------------
说的对
------解决方案--------------------
虽然结果一样但运算类型不同,一个是指针向后移一位,一个是指针中的数值自加一。
------解决方案--------------------
*p++值因为为1;
//*p++
int result = *p++,可以理解为:
int* ptmp = p;
p++;
result = *ptmp;
//*++p
int result = *++p可以理解为:
++p;
*p;
//(*p)++
int result = (*p)++可以理解为:
result = *p;
result++;
为了便于理解,最好用()来定义优先级,代码会清楚点
------解决方案--------------------
++
------解决方案--------------------
这个就涉及到了所谓的表达示求值问题了,在C++中既可作左值,也可作右值,不知道C++11的标准是怎么样的……