2 bldwihc bldwihc 于 2016.01.14 04:11 提问

当指针'*'和自增"++"在一起的时候,如何执行?

例: int a[5]={11,22,33,44,55};
int p=a;
printf("%d\n",*p++);
printf("%d\n",
(p++));
上面"*p++" 和"*(p++)",都是一样的自右向左的优先级.但又怎么先取值,再加1?
不是先进行"++"后指针"*"吗?

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.14 04:38
已采纳
 *p++; 不是 *p = *p + 1; 它却是 *p = *(p+1); 而且是后加加。
int a[5]={11,22,33,44,55};
int *p=a;
printf("%d\n",*p++); 输出 a[0]的值 11,后加加:表达式里先用原值,不自增。
出了上面打印语句再自增 *p = *(p+1); 
接着打印 printf("%d\n",*p); 打出 a[1]的值 22。
bldwihc
bldwihc 按照优先结合性,*++p ,它的值却是直接打印.它为什么不直接打印a[1]的值?
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.14 04:39

如果我的回答帮助了您,请及时采纳,方法是,点击我回答右边的蓝色采纳按钮。谢谢!

litpud
litpud   2016.01.14 07:02

为什么要写这样的代码?可阅读性好还是可维护性好?分开写,永远不会犯错。

enpterexpress
enpterexpress   Rxr 2016.01.14 09:09

上面"*p++" 和"*(p++)",都是一样的自右向左的优先级.但又怎么先取值,再加1?
不是先进行"++"后指针"*"吗?
是这样的呀++位置不同导致p什么时候加1,然后再作指针运算

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
指针的自增运算具体代表什么?
指针一直是 C 语言的瑞士军刀,它的使用程度反应了一个 CODE 的水平。今天我们就指针 p 的自增运算来作为我们的第一步基石。在说指针之前,我们说说整形变量 i 的自增,对于整形变量 i 它的值域是表示一个整数值,所以自增就是 i 变量加一,另外自增说到底是一个预算符,所以在这里我们要引入一个很重要的概念——运算符重载,对于不同的前缀,就有不同的预算符重载函数,运算符重载加上函数重载就是 C 语...
指针变量的的各种自增 *p++
这个问题其实是论述*P++等价于(*p)++还是等价于*(p++)的问题,为了验证这个问题,我编写了下面的小程序(vc++6.0编译环境),作为验证 程序1 #include "stdio.h" void main() {     int a=2;     int *p=&a;     int *pold;//记录P指向的地址,为了作为比较使用     pold=p;
C语言复习 -- 结构体指针与自增运算符
测试代码: #include #include int main() {  struct student {   char *name;   int score;  };  struct student st = {"Brian", 97};  struct student *ptr = &st;  printf("ptr->name = %s\n",
指针的自增运算符用法
首先看看自增运算符的用法。 有以下代码: int a=2; printf("%d,",++a); printf("%d",a); 输出结果是3,3。 修改一下: int a=2; printf("%d,",a++); printf("%d",a); 结果是2,3。 比较一下两段代码: 第一段代码是++a,在使用a之前,先使a的值加1,再使用a。 第二段代码是a++
指针取值(*)与自增(++)运算
++(*p) 先取指针指向的内容,然后给内容加1,加1操作当前生效。等价于 ++*p (*p)++ 先取指针指向的内容,然后给内容加1,加1操作在该语句执行后生效 *(p++) p指针加1,加1操作在该语句执行后生效,然后取当前p指针指向的内容。等价于 *p++ *(++p) p指针加1,加1操作当前生效,然后取当前p指针指向的内容。等价于 *++p
c++的指针自增的使用,自增和*的混合运算
弄清楚运算符的优先级,对于一个程序员来说是极为重要的,虽然运算符的优先级是基础知识,但是很多时候我们会因小失大,所以学习一门语言一定要把基础东西弄懂,切不可得过且过! 下面我谈谈两个简单式子,并讨论他们的计算过程 由运算符的优先关系,++的优先级比*高 1.++*p++; 先计算p++,指针要往下移动一位,但注意这时候的++是后自增,所以得在这个表达式执行完p才是真正地向下移动了一位,此时
Go语言学习笔记 --- 指针和自增自减运算及相关注意事项
指针 Go中不支持指针运算以及 -> 运算符,而直接采用 . 选择符来操作指针目标对象成员 操作符 & 取变量地址,使用 * 通过指针间接访问目标对象 默认值为nil 而非 NULL 示例代码:a := 1 // 定义一个int型的a var p *int = &a // 此处说明: p 是一个指向int型的指针,指向的是a的地址 fmt.Println(*p) // 1 // 使用*p的形式输出地
C++输出指针自增(++)运算示例
#include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char s[] = "012345678", *p = s; cout
Integer执行++操作解析
Integer执行自加操作
8086CPU 取指令 执行 寄存器 理解
问题描述:学习x86的过程中对cpu的取指、执行工作原理一直是一知半解,上网查了很多相关,发现都讲的不全或者说很模糊。所以,经过自己长时间的查阅总结,终于画出了下图。在此之前需要说明下: cs:代码段寄存器 ip:指令指针寄存器 x86cpu:地址宽度20,但是cpu只能提供16位的访问宽度,因此cpu把两个16位数一个当作段地址,一个当作偏移地址合成一个20位数. 段地址 * 16 +