我是靠谱客的博主 难过老虎,最近开发中收集的这篇文章主要介绍【C语言】运算符*和++的优先级关系及两者结合使用分析1、*p++2、*++p,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

/代码1
int p=5;
int i;
i=p++;//此处,i的值为5,p的值还是5
printf("i=%d,p=%dn",i,p);//此处,i的值为5,p的值已经变为6
/代码2
int p=5;
int i;
i=++p;//此处,p的值首先加1变为6,然后赋值给i
printf("i=%d,p=%dn",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=%dn",*p);//指向数组a的a[0]元素
	
	t=*p++;
	printf("t=%dn",t);//t的值等于a[0]的值
	
	printf("*p=%dn",*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=%dn",*p);
	
	t=*++p;
	printf("t=%dn",t);
	
	printf("*p=%dn",*p);
	
	return 0; 
}

在这里插入图片描述

最后

以上就是难过老虎为你收集整理的【C语言】运算符*和++的优先级关系及两者结合使用分析1、*p++2、*++p的全部内容,希望文章能够帮你解决【C语言】运算符*和++的优先级关系及两者结合使用分析1、*p++2、*++p所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部