- 主题:在这段程序中的优先级怎么判断?
收到,谢谢
【 在 gameplayer 的大作中提到: 】
: []运算符的语法是 Expr1 [ Expr2 ] ,这才是一个完整的表达式
: 在一个语句中,如果[]的优先级高,就是说先计算 Expr1 [ Expr2 ] 这个表达式,而不
: 是先计算Expr1或者Expr2,因为它俩只是[]的运算子,它的值就是 * ((expr1) + (exp
: ...................
--
FROM 111.193.230.*
好的,谢谢
【 在 z16166 的大作中提到: 】
: C的基础的话,看这本就够了
:
https://www.cnblogs.com/freedomweb/p/12907389.html: 《C程序设计语言》,又译为C语言程序设计,是介绍C语言的计算机科学著作,由计算机科学家布莱恩·柯林汉和C语言之父丹尼斯·里奇合著,是第一部介绍C语言编程方法的书籍。它因作者名字的缩写被简称为K&R;或是因封面颜色,被称为白皮书。
: ...................
--
FROM 111.193.230.*
我会特意加上括号,因为你无法知道后面人读你代码的水平,也无法确定自己是否会眼花. 这叫防御性编程思维
--
FROM 120.204.169.*
括号的作用之一就是用来降低心智负担的,让人把注意力放到更有用的东西上去。
记那么多细节,心智负担太重了
各种操作符的优先级,一般人也就记个大概,需要仔细甄别的场合查一下手册。
能详细记住每个操作符优先级的,也就是机器。
【 在 sqsl 的大作中提到: 】
: 我分不清*parr[1]是(*parr)[1]还是*(parr[1]),最后验算了一下是*(parr[1])。c语言
: 手册上只说[]的优先级大于*,我理解的是[]里面大,这种在侧面的也遵循这个规律么?
:
: ...................
--
修改:z16166 FROM 61.48.130.*
FROM 61.48.130.*
【 在 RunFIFO 的大作中提到: 】
: 我会特意加上括号,因为你无法知道后面人读你代码的水平,也无法确定自己是否会眼花. 这叫防御性编程思维
工程实践中,这就是正道。
--
FROM 123.116.132.*
同一段(不规范)代码,不同编译器出来的结果可能不一样,抓狂。
【 在 smartlinux 的大作中提到: 】
:
: 工程实践中,这就是正道。
--
FROM 104.194.79.*
那不可能吧
只有UB的代码才会。或者是编译/优化器的bug
【 在 fourwind 的大作中提到: 】
: 同一段(不规范)代码,不同编译器出来的结果可能不一样,抓狂。
--
FROM 61.48.130.*
优先级查书就行了。*作为乘号和地址指向是两个运算符
【 在 sqsl 的大作中提到: 】
: 我分不清*parr[1]是(*parr)[1]还是*(parr[1]),最后验算了一下是*(parr[1])。c语言
: 手册上只说[]的优先级大于*,我理解的是[]里面大,这种在侧面的也遵循这个规律么?
: 当然可以用括号来规避这种拿不准的风险,纯学习性的技术讨论。
: ...................
--
FROM 115.171.244.*
int j=1;
cout<<(j++)<<(j++)<<(++j)<<(++j);
我印象中在ms的vc里和gcc出来的结果不一样。所以我说不规范的代码里可能会出来不一致的结果;
int *p;
p = 0;
好像有一个编译器会报错,另一个就不会。
【 在 z16166 的大作中提到: 】
: 那不可能吧
: 只有UB的代码才会。或者是编译/优化器的bug
:
--
FROM 223.102.68.*
这不是UB。
函数调用是一个sequence point,有4个串行的函数调用
std::cout::operator<<(j++)
std::cout::operator<<(j++)
std::cout::operator<<(++j)
std::cout::operator<<(++j)
msvc和gcc的结果都是1、2、4、5
【 在 fourwind 的大作中提到: 】
: int j=1;
: cout<<(j++)<<(j++)<<(++j)<<(++j);
: 我印象中在ms的vc里和gcc出来的结果不一样。所以我说不规范的代码里可能会出来不一致的结果;
: ...................
--
FROM 61.48.130.*