C语言的优先性和团结偏向
当前位置:以往代写 > C/C++ 教程 >C语言的优先性和团结偏向
2019-06-13

C语言的优先性和团结偏向

C语言的优先性和团结偏向

问题 :

C语言的书籍的附录都要说一个问题,就是优先性和团结偏向。

我的领略是这些是成立在表达式的基本之上的,写一个c语言的表达式可能看一个C语言的表达式,先看优先性,在优先性沟通的环境下,再按照团结偏向,判定表达式的谁人部门先运算,谁人后运算。如:

1. a=b=c=0,只有一个=,因此优先性沟通,因此看团结偏向,团结偏向是从右到左,因此,整个表达是从右开始计较,上面等价与a=(b=(c=0)),这是正确地,可是下面这个问题该怎么表明哪?

2. a=*p++;

=,优先级低于*,++,也就是等价于a=(*p++);可是*p++,这个部门是怎么运算哪?写过C的都知道*先,++后,但是在C语言附录中,*(取地点),++是同优先级的,2级,团结偏向是从右到左,凭据这个领略就应该*(p++),这才是从右到左吧,不知原领略有没有问题,可是这个和实际应用的相反的嘛?

解答:

关于a = *p++;

首先,“后自增”运算符的优先级是高于“*”的,“前自增”才跟“*”平级。这一点楼主没有看仔细。

然后,为什么优先级高于“*”,功效照旧取出了本来的指针指向的内容呢?

有许多书上说“后自增”是先“用”值,再加1,这种说法是很不严格很不确切的。正是这种不严格和不确切,才导致了很多初学者在*p++上绊倒。

再看一个更简朴的例子:

int i = 10;

int j = i++;

此刻j便是几多?各人都知道是10,问原因,许多人城市说是“在后自增的环境下,是先赋值再加1”。这中说法完全不认真任,赋值运算赋“=”的优先级比“后自增”低好几个级别,怎么大概产生“先赋值”这样的事?

正确的语义表明是:“前自增”和“后自增”都是先将变量加1,然后区别在于加1后返回值,后自增在加1后返回的是本来的,而前自增返回的是加1后新值。

从结果上,i++相当于一个逗号表达式:“tmp = i, ++i, tmp”

    关键字:

在线提交作业