C语言趣味题目
这些是我搜集到的觉得有点意思的C语言题目,都不复杂,却有些难度,有兴趣的人可以一试(有些可能也不能说难,但可能不容易想答案):
- a+++++b是合法的C表达式吗?为什么?
- 如何用宏定义实现SWAP(a,b),交换a和b的值。
- 写一个C程序,不使用分号,实现输出Hello,World这个字符串。
- 想一个算法,判断一个链表是否成环?
这些是我搜集到的觉得有点意思的C语言题目,都不复杂,却有些难度,有兴趣的人可以一试(有些可能也不能说难,但可能不容易想答案):
Java的Final看起来和C/C++的Const有几分相似,但又有很多不同,看了这篇文章后总结如下,Final有三种主要用法:
修饰变量:variable
final变量是不可改变的,但它的值可以在运行时刻初始化,也可以在编译时刻初始化,甚至可以放在构造函数中初始化,而不必在声明的时候初始化,所以下面的语句均合法:
而如果修饰类对象,并不表示这个对象不可更改,而是表示这个这个变量不可再赋成其它对象,这就比较象 C++的 Class const * p了。
final Value v = new Value(); v = new Value(); //不允许! v.some_method(); //允许
final经常和static一起用,这种用法类似C++的常量,在Java中很常见,比如 static final i = 10; 但这里同样也是允许运行时刻初始化的。
修饰方法:method
修饰方法时,final和C++的const就差别太大了,final表示一个Java函数不可更改,也就是不能被重载了,而不是修饰返回值的,所以private方法自动就是final的了(它们不会被重载)。
带来的一个附带的好处就是,final方法可以被编译器优化,比如内联什么的,也就是说final的方法可能效率会高一些(仅仅是可能,具体取决于编译器)。
修饰类:class
这个可以从final修饰方法引申开去,就表示整个类不能被继承了, 自然,里面的所有方法也相当于被加了final。
总之,final和const差别较大,还好Java换了一个关键字来做这些,否则会晕倒一批C++用户的,不过Java似乎保留了const这个字,不知留作什么用。