精华内容
下载资源
问答
  • C语言在数组中使用*++优先级问题 最近一段时间在网上看到了许多的c语言关于数组中使用*++运算求结果的题目,之后自己写程序验证了一下优先级,在这里大家分享一下。 1 #include <stdio.h> 2 #include ...

    C语言在数组中使用*和++优先级问题

    最近一段时间在网上看到了许多的c语言关于数组中使用*和++运算求结果的题目,之后自己写程序验证了一下优先级,在这里和大家分享一下。

      1    #include <stdio.h>
      2    #include <stdlib.h>
      3 
      4    #define m 10
      5 
      6    int main()
      7    {
      8        int q[m]={10,2,20,4,30,6,40,8,50,9};
      9        int *p = q;
     10       printf("*p++ = %d ",*p++);
     11       printf("*++p = %d ",*++p);
     12       printf("(*p)++ = %d ",(*p)++);
     13       printf("(*++p)++ = %d ",(*++p)++);
     14       printf("*p = %d ",*p);
     15       printf("++(*++p) = %d ",++(*++p));
     16       printf("*p = %d ",*p);
     17       //printf("*++p++ = %d",*++p++); error;
     18   }
     19 
    
    

    结果为 * p++ = 10 * ++p = 20 ( * p)++ = 20 ( * ++p)++ = 4 * p = 5
    在这里可以看出在数组中当++或- -运算与 * 运算一起运算时先进行++或 - -运算在进行 * 运算。也就是说当出现当出现*p++这种类型的运算时得到的是指针偏移后的结果。
    而当( * p)++这种形式出现时得到的是自增自减之后的结果。
    当(++ *p)++这种形式出现时我们先做偏移后做自增自减运算。
    注意最后注释上的形式是错误的。

    展开全文
  • 运算符*++都属于单目运算符,两者的优先级是一样的,结合性的方向是从右到左。 首先,关于++运算符的特性,我们需要了解一下。 ++在前,则变量先自身加1,然后参与所在表达式的其它运算; ++在后,则变量首先参与...

    运算符*和++都属于单目运算符,两者的优先级是一样的,结合性的方向是从右到左。

    首先,关于++运算符的特性,我们需要了解一下。
    ++在前,则变量先自身加1,然后参与所在表达式的其它运算;
    ++在后,则变量首先参与所在表达式的运算,然后在当前语句最后结束前(以分号作为结束标志)自身加1。
    见下例:

    /代码1
    int p=5;
    int i;
    i=p++;//此处,i的值为5,p的值还是5
    printf("i=%d,p=%d\n",i,p);//此处,i的值为5,p的值已经变为6
    /代码2
    int p=5;
    int i;
    i=++p;//此处,p的值首先加1变为6,然后赋值给i
    printf("i=%d,p=%d\n",i,p);//此处,i的值为6,p的值为6
    

    然后我们分析一下几种情况:

    1、*p++

    *(p++)这种写法尽量不要这样写,容易引起歧义,编译器实际上还是按照*p++来处理。
    

    因为文章开头提过,运算符*和++都属于单目运算符,两者的优先级是一样的,结合性的方向是从右到左。
    然后有些人会认为这个表达式的运算顺序是:p先自身+1,然后进行解引用。其实这种想法是错误的。
    正确的运算顺序应该是首先解引用指针变量p,然后p在自身加1。
    之所以不按照从右向左的结合性,是因为++自身的特性引起的,我们在前面已经讲过。

    例1:

    #include <stdio.h>
    
    int main(void)
    {
    	int a[3]={1,2,3};
    	int *p=a;
    	int t;
    	
    	printf("*p=%d\n",*p);//指向数组a的a[0]元素
    	
    	t=*p++;
    	printf("t=%d\n",t);//t的值等于a[0]的值
    	
    	printf("*p=%d\n",*p);//指向数组a的a[1]元素
    	
    	return 0; 
    }
    

    在这里插入图片描述

    2、*++p

    *++p的运算顺序就是首先p自身加1,然后对p进行解引用。

    例2

    #include <stdio.h>
    
    int main(void)
    {
    	int a[3]={1,2,3};
    	int *p=a;
    	int t;
    	
    	printf("*p=%d\n",*p);
    	
    	t=*++p;
    	printf("t=%d\n",t);
    	
    	printf("*p=%d\n",*p);
    	
    	return 0; 
    }
    

    在这里插入图片描述

    展开全文
  • *与++优先级

    2020-05-04 16:11:15
    前缀递增递减*优先级相同,从右到左; 后缀递增递减比前缀优先级高,从左到右。 比如 1 2 int arr[5] = { 1,3,5,7,9 }; int *p = arr; ++p:p先自+,然后p,最终为3——马上改变指针,*下一个指针 *p++:值为arr...

    前缀递增递减和*优先级相同,从右到左;

    后缀递增递减比前缀优先级高,从左到右。

    比如
    1
    2

    int arr[5] = { 1,3,5,7,9 };
    int *p = arr;

    ++p:p先自+,然后p,最终为3——马上改变指针,*下一个指针

    *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1] ————之后改变指针,*原数据,指针++

    (p++):效果等同于p++ ——之后改变指针,*原数据,指针++

    (p)++:先p,即arr[0]=1,然后1++,该语句执行完毕后arr[0] =2——不改变指针,数据++

    ++p:先p,即arr[0]=1,然后再++,最终为2——不改变指针,++数据

    只有++(*p),(*p)++,++*p使指针的位置不变,改变数组的原始数值,

    其他的任何情况都是指针指数组的下一个,指针的位置+1

    展开全文
  • C语言中*++的优先级

    千次阅读 2020-04-05 22:10:16
    *++为同一级别的运算符,只是结合顺序为由右向左。 *w++ ;//右结合*(w++); ++*w ;//右结合++(*w);

    *和++为同一级别的运算符,只是结合顺序为由右向左。

    *w++ ;//右结合*(w++); 
    ++*w ;//右结合++(*w); 
    
    展开全文
  • c/c++中,*与++的优先级

    千次阅读 2019-12-10 16:30:39
    今天看openj9的源码,看到一句...首先想到的是优先级,个人理解,*++在c c++中,应该是++的优先级更高,查了一下,结果如下: 那么感觉结果应该是先++,后*,自己写了个简单代码进行测试,代码如下: int m...
  • *s++中的*++的优先级

    2019-07-14 10:15:21
    *号和++属于同一优先级,且方向都是从右向左的,s++和(s++)作用相同。 例子如下: char a[]="abdasf"; char *s=a; printf("%d\n",s);//打印一地址值x *s++; printf("%d\n",s);//打印一地址值x+1 ...
  • *p++里*++的优先级

    千次阅读 2018-05-21 09:22:51
    *号和++属于同一优先级,且方向都是从右向左的,所以*p++和*(p++)作用相同。如下例子: char a[]="asdasf"; char *p=a; printf("%d\n",p);//打印一地址值x *p++; printf("%d\n",p...
  • *++的优先级

    千次阅读 2017-07-23 14:34:06
    *++的优先级
  • *与++的优先级关系

    千次阅读 多人点赞 2018-05-11 17:54:49
    前缀递增递减*优先级相同,从右到左;后缀递增递减比前缀优先级高,从左到右。比如12int arr[5] = { 1,3,5,7,9 };int *p = arr;*++p:p先自+,然后*p,最终为3——马上改变指针,*下一个指针*p++:值为...
  • 指针的自增与优先级详解 小试牛刀 代码示例1 int arr[] = { 1, 3668, 5, 7, 9}; printf("%d\n", *p++ );//拿到arr[0]的值1 printf("%d\n", *p++ );//拿到arr[1]的值3668 printf("%d\n", *p++ );//拿到arr[2]...
  • 运算符优先级问题(*p2++ = *p1++)

    千次阅读 2018-05-28 16:07:26
    1、*与++运算*p2++ = *p1++;++优先级高于*,而且是从右往走计算2、*与[ ]运算int *pa[10];*优先级高于[ ],故这是一个10个元素的数组,每个元素是int指针3、[ ]优先于++...
  • 所以说明++的优先级是高于*指针 二、实列代码演示 #include<stdio.h> int main() { //在此说明 按照书上的说法++ (后置) >++(前置) >* 解引用用 > = 等于,但是 //c = ++*p为什么先算的 *p 后算的...
  • *p++的优先级和使用

    千次阅读 2017-06-22 14:53:07
    *p++等价于*(p++),p肯定是个指针,这句话的意思是先取出*p的值,然后让指针指向下一个数据。(*p)++的意思是先把*p的值取出来,然后把*p的值++。 使用中要注意到右++是先使用后++,所以可能会造成一些误解。...
  • C中的运算符优先级和结合性(*p++)

    千次阅读 2018-08-14 16:17:27
    优先级和结合性 优先级是用来标识运算符在表达式中的运算顺序的,在求解表达式的值的时候,总是先按运算符的优先次序由高到低进行操作。但是,当一个运算对象两侧的运算符的优先级别相同时,则按运算符的结合性来...
  • 关键在于熟练掌握操作符的优先级和++的使用方法 ... //*p++和*p=*p+1的区别是后者是P指向的地址的值+1,前者是P的地址+1,所有后者、即单独的*p++;等价于P++,是一种容易误解的写法,在实际程序中
  • C语言指针 *p++和*++p及++*p的区别

    千次阅读 2020-11-06 16:05:34
    ++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,因此等价于 *(p++),又因为后置++是先使用再自加,所以先取值 *p,然后再让p加1. *++p ++和 *(指针访问运算符)优先级相同,根据从右往左的结合性,...
  • *p++中*++的优先级问题

    千次阅读 2016-11-01 14:55:48
    *p++先执行++再执行*,分三步 (1)先执行p++,因为是后置,先用p (2)再执行*p,取p所指的内容 (3)最后再让p++,让p的地址加一个单位 具体的看代码
  • 整片文章分为三个部分,分别是: 对于理解所提问题必须清楚的3个关键点; 对3个关键点的理解;...其中,第三点又是这三个关键点中最关键的,特别在帮助大家理解含有前置++和后置++的复杂表达式的时候。 2、对3个
  • 他们的优先级是一样的,又因为处在第二级别的优先级运算符是结合方向是从右到左,所以当出现*p++这样的表达式的时候,根据优先级别相同,并且结合方向是从右到左,所以等价于*(p++)了。那么也是,先将p指针移动到下...
  • 对于结果我目前也没分析到位,望读者留言分析一下。
  • C语言中的*p1++=*p2++

    千次阅读 多人点赞 2019-06-11 10:36:01
    例:把一个数组的内容复制给另一个数组 #define SIZE 50 int x[SIZE]; int y[SIZE]; int *p1, *p2; void try2() ...后缀++ 操作符的优先级高于*操作符,即*p1++ = *(p1++) 故执行顺序为:p1++ ...
  • C语言 *p++=*q++ 理解

    千次阅读 2020-07-13 10:13:46
    优先级问题 经查表,首先 * 与 ++ 的优先级是一样的,根据编译原理应当遵守靠右的规则,所以 *p++ = *(p++); i++与++i的区别 网上已经有很多帖子贴代码测试过了,这里我直接引用...printf("%d",*++p); //输出结果为1
  • C语言学习之指针 *p++、*(p++)、(*p)++

    千次阅读 多人点赞 2019-10-10 11:43:06
    C编译器认为*++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,*(p++)意思一样;在(*p)++中,由于()的优先级比*++都高,所以++作用在()内的表达式*p上。 比如有: i...
  • *p++、*(p++)、(*p)++、*++p、++*p的区别

    万次阅读 多人点赞 2018-12-17 10:40:24
    之前我一直理解的是前缀++优先级高于后缀++,然后我在翻阅C++优先级顺序表时却发现后缀++的优先级其实是高于前缀++和*的,但是为什么我们通常都说后缀++是等当前表达式完成再自增呢? 解答 然后我看了Effective C++...
  • (*p)++和*(p++)和*p++的区别

    千次阅读 2020-07-18 11:43:14
    (*p)++和*(p++)和*p++的区别 *(p++)究竟是谁++,是p的地址++,还是p所指的东西的地址++ 前缀递增递减和*优先级相同,从右到左; 后缀递增递减比前缀优先级高,从左到右。 比如 1 2 ...
  • C指针(*++argv)[0]和*++argv[0]的区别

    千次阅读 2019-01-04 14:08:08
    那 ( *++argv)[0]和*++argv[0]表达的是什么意思呢? 其实他们有自己特定的意义。 先对他们进行分析,根据结合性,[]的优先级要大于*++, *++都属于单目运算符,优先级是一样的,且遵从右结合性; 那么*++argv[0]...
  • C语言中 ++ * 的优先级

    万次阅读 多人点赞 2018-06-23 18:24:30
    在C语言中,自增运算符++和指针运算符*的优先级关系为 左++ > * >右++ 比如++ *i 相当于 ++ (*i) ,指针i对应的变量+1。 *i ++ 相当于 * (i++) ,指针i,也就是地址值 +1(其实是加1个变量所占的地址空间) ...
  • 首先,需要知道,p++和++p的区别:p++:1.将p的值作为表达式p++的值 2.执行p=p+1++p:1.执行p=p+1 2.将p的值作为表达式++p的值 可见,两者的区别是运算顺序的不同。 其次,我们要知道,*运算符和++运算符位于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,028,649
精华内容 411,459
关键字:

*和++的优先级

友情链接: C-language-code.tar.gz