C語言和C 相關(guān)的面試題一直比較少見一些,沒有 Java方向?qū)懙娜四敲炊啵@是一篇 C 語言與 C 面試知識點總結(jié)的文章,非常難得。
const
作用
- 修飾變量,說明該變量不可以被改變;
- 修飾指針,分為指向常量的指針(pointer to const)和自身是常量的指針(常量指針,const pointer);
- 修飾引用,指向常量的引用(reference to const),用于形參類型,即避免了拷貝,又避免了函數(shù)對值的修改;
- 修飾成員函數(shù),說明該成員函數(shù)內(nèi)不能修改成員變量。
const 的指針與引用
- 指針
- 指向常量的指針(pointer to const)
- 自身是常量的指針(常量指針,const pointer)
- 引用
- 指向常量的引用(reference to const)
- 沒有 const reference,因為引用本身就是 const pointer
(為了方便記憶可以想成)被 const 修飾(在 const 后面)的值不可改變,如下文使用例子中的 p2、p3。
使用
// 類
class A
{
private:
? ?const int a; ? ? ? ? ? ? ? ?// 常對象成員,只能在初始化列表賦值
public:
? ?// 構(gòu)造函數(shù)
? ?A() : a(0) { };
? ?A(int x) : a(x) { }; ? ? ? ?// 初始化列表
? ?// const可用于對重載函數(shù)的區(qū)分
? ?int getValue(); ? ? ? ? ? ? // 普通成員函數(shù)
? ?int getValue() const; ? ? ? // 常成員函數(shù),不得修改類中的任何數(shù)據(jù)成員的值
};
void function()
{
? ?// 對象
? ?A b; ? ? ? ? ? ? ? ? ? ? ? ?// 普通對象,可以調(diào)用全部成員函數(shù)、更新常成員變量
? ?const A a; ? ? ? ? ? ? ? ? ?// 常對象,只能調(diào)用常成員函數(shù)
? ?const A *p =