为何不精通C? 02 C语言中的符号重载,优先级

本文主要将两个部分,香港虚拟主机,符号重载和运算优先级问题,这两个问题很常见,很繁琐。我猜绝大部分的人在学习时都选择性忽略该章节的内容。但是在面试时,却常常考这方面的东西,因为,“精通”之名。

C中,具备着符号重载,符号重载是体现在程序上下文语境中,不同符号表现出不同的含义。比如“*”,具备三个含义:声明指针,指针解引,乘号。 《C专家编程》总结了下所有的符号重载,用以理清C语言作用域规则:

符号意义

static

函数内部:表示仅在首次调用声明该变量,在此后调用中保持传承函数定义:该函数仅在本文件中可见

extern函数定义:表示全局可见(默认属性,extern可省略)变量声明:仅说明该变量在其他地方定义。

void函数返回值: 不返回任何值参数表:表示没有参数指针声明:通用指针

*乘号声明:表示是一个指针调用:取指针所指的值

&调用:取该变量地址位操作:与操作符

=赋值符

==比较运算符

<=<<=小于等于左移复合赋值运算符

<比较:小于号#include 的左定界符,搜索从环境变量路径开始

()函数定义中:包围形参表调用一个函数强制类型转换改变运算顺序定义带参数的宏包围 sizeof操作符的操作数(类型名)

优先级

实践中碰到了一堆操作符,怎么办?最佳tips:

仅记住乘除运算优先于加减剩下的全部加括号

但是,要想精通C, 必须能够看懂别人写的代码,所以,一些优先级的常识还是需要巩固。注:关于声明部分的优先级,可以参考后续博文

优先级问题表达式人们可能的误解实际的含义

. 的优先级高于*,香港服务器,因此实践中用“->”代替*p.fp所指对象的成员f;(*p).f对p取f偏移,作为指针,然后解引操作;*(p.f)

[]优先级高于*int* p[]p是指向int数组的指针;int(*p)[]p是一个存储元素类型为int* 的数组;int*(p[]);

函数()优先于*int* fp()fp是一个函数指针,该函数返回int;int (*fp)()fp是一个函数,返回 int*int* (fp())

==和!=高于位操作符(val&mask != 0)(val&mask)!=0val&(mask!=0)

==和!=高于赋值符c=getchar()!=EOF(c=getchar()) != EOFc=(getchar()!=EOF) c为真假

算术符优于移位msb<<4+lsb(msb<<4)+lsbmsb<<(4+lsb)

逗号优先级最低i=1,2i=(1,2)(i=1),2 2被抛弃

总结下次序吧:

通常来说,结合性都是与优先级配合使用的,但是常见课本中一大堆凌乱的表示,让人眼花缭乱,整体来看,所有的结合性规则可以归结成以下两句话:

所有的赋值符 都具有右结合性。 何为赋值符呢,我的理解是 “真实调用时,是否改变”剩下的,都是左结合性

举例解释我对改变的理解

1、意变

以上意变其实都是属于单目运算符的部分

2、值变

总结:更多的,还是按着直觉走,要记的,就是那些不走寻常路的,另外,我觉得改变部分凝练得还行,香港服务器租用,^_^

又或者是后天的,我们不断学习,努力进取的路途中辛苦寻到的武器。

为何不精通C? 02 C语言中的符号重载,优先级

相关文章:

你感兴趣的文章:

标签云: