C语言中的运算符绝对是C语言学习和使用的一个难点,因为在2011版的标准中,C语言的运算符的数量超过40个,甚至比关键字的数量还要多.这些运算符有单目运算符.双目运算符以及三目运算符,又涉及到左结合和右结合的问题,真是令人眼花缭乱. 1.运算符及优先级 运算符多可能使用更灵活方便,但这还涉及到运算符之间的优先级问题.我们做四则运算式时,有先乘除后加减的规定,在C语言的这些运算符中自然也是有的,但40多个运算符排起优先级来,使用就不那么容易了. 接下来我们简单的总结一下C语言中运算符以及他们的优先…
运算符的优先级和结合性有明确的规定,但是,除少数例外情况外,表达式的求值次序没有定义,甚至某些有副作用的子表达式也没有定义. 也就是说运算符的定义保证了其操作数按某一特定的顺序求值,否则具体实现可以自由选择任意求值顺序,甚至可以交换求值次序.但是每个运算符 将其操作数生成的值结合起来的方式与表达式的语法分析方式是兼容的.(该规则废除了原先的一个规则:当表达式中的运算符在数学上满足交换律 和结合律时,可以对表达式重新排序) 以下按优先级从高到底: 1.指针生成: 2.初等表达式: 3.后缀表达式:…
我们在使用C语言实现相对复杂的软件开发时,经常会碰到使用回调函数的问题.但是回调函数的理解和使用却不是一件简单的事,在本篇我们根据我们个人的理解和应用经验对回调函数做简要的分析. 1.什么是回调函数 既然谈到了回调函数,首先我们就要搞清楚什么是回调函数.在讨论回调函数之前,我们需要说明另一个概念,那就是函数指针.什么是函数指针呢?说的浅显一点,函数指针就是指向函数的指针,说白了也是一种指针,只是它指向的不是整型,字符型等数据量,而是指向函数.在C中,每个函数在编译后都是存储在内存中,并且每个函数…
在C语言中有一个typedef关键字,其用来定义用户自定义类型.当然,并不是真的创造了一种数据类型,而是给已有的或者符合型的以及复杂的数据类型取一个我们自己更容易理解的别名.总之,可以使用typedef关键字定义一个我们自己的类型名称. 那么,究竟如何定义,又有哪些情况下可已使用呢?接下来我们就对它的几种用法进行说明: (1)基本数据类型定义 有些时候,我们会使用typedef关键字对一些基本数据类型进行重新定义.例如我们使用标准整数的数据类型uint8_t和uint16_t等时,其实他们的定义…
在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图. 事实上,无论我们是使用const关键字声明变量还是声明参数,其目的都是为了告诉使用者这个变量或者参数的应用目的.合理地使用关键字const 可以使编译器有效地保护那些不希望被改变的变量或参数,防止其无意中被代码修改.所以使用const关键字可以避免一些不必要的错误. 我们已经说明了const关键字的作用,接下来我…
C语言有很多关键字,大多关键字使用起来是很明确的,但有一些关键字却要相对复杂一些.我们这里要说明的static关键字就是如此,它的功能很强大,相应的使用也就更复杂. 一般来说static关键字的常见用法有三种:一是用作局部变量的修饰符:二是用作全局变量修饰符:三是用作函数修饰符.在本篇接下来的描述中,我们将详细分析这三种用法.  1.用于局部变量的修饰 当static用于修饰局部变量时,通常是在函数体内,而且只能在该函数内被调用.但是这样定义的变量通常被称为局部静态变量,它的值的不会因为函数调用…
在C语言中,修饰符extern用在变量或者函数的声明前,用来以标识变量或者函数的定义在别的文件中,提示编译器遇到此变量或者函数时,在其它文件中寻找其定义.extern关键字的用法有几种,我们下面对其进行说明. (1)extern修饰变量的声明 extern关键字可以用来修饰变量,表示该变量在别的文件中已有声明.例如:我们在文件file1.c中声明了变量int var,然后我们又需要再file2.c中使用该变量,则可在文件file2.c中声明extern int var,就可在文件file2.c中…
在C语言中,还有一个并不经常使用但却非常有用的关键字volatile.那么使用volatile关键字究竟能干什么呢?接下来我将就此问题进行讨论. 一个使用volatile关键字定义变量,其实就是告诉编译系统这变量可能会被意想不到地改变.那么编译时,编译器就不会自作主张的去假设这个变量的值,而进行代码的优化了.确切的说就是,编译器在编译代码时,优化器每次遇到这个变量,都会到内存中重新读取,而不会使用保存在寄存器里的备份来对代码进行优化. 我们已经了解了volatile关键字的基本作用.那么,在什么…
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出现,位于文件的最前面和最后面. 2.<head></head>&<body></body> 表示文件头和文件主体,成对出现. (1)文件头是规定该文件标题和一些属性的,例如标题.编码方式.URL等,不出现在网页中,若为无需提供相关信息可省略. (2)文件…
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常规的数而使程序员误以为自己已给变量进行过初始化),这个“85”开头的数叫“填充字”,提醒程序员没有初始化变量. #include<stdio.h> int main(void) { int i; printf("i = %d\n", i); } 运行后:   变量对应于内存中的…