頂層const: 表示任意的物件是常量。
底層const: 與指標和引用等復合型別有關。
對指標而言, 頂層const表示指標本身是個常量, 而底層const表示指標所指的物件是乙個常量。
int i = 22;
const
int ci = 20; //頂層const, 不能修改ci的值
const
int *p1= &ci; //底層const, 允許修改p1的值, 但是不能通過*p1修改ci
的值。int *const p2 = &i; //頂層const, 不能修改p2的值, 但是允許通過*p2修改i
的值
用實參初始化形參時, 會忽略掉頂層const, 也就是說,當形參有頂層const時, 傳給它常量物件或者非常量物件都是可以的。
總結int cube(int i); 實參可以為int型別, 也可以為const int型別。 在函式體中可以修改i的值, 函式不會修改實參的值。
int cube(const int i); 實參可以為int型別, 也可以為const int型別。 在函式體中不可以修改i的值, 函式不會修改實參的值。
int pcube(int * pi); 實參為int * 型別的指標, 不能為const int * 型別。 可以通過修改* pi 的值修改實參指向的物件的值, 修改pi對實參沒有影響。
int pcube(const int pi); 實參可以為const int 型別,也可以為int * 型別。 不可以通過修改* pi 的值修改實參指向的物件的值, 修改pi對實參沒有影響。
int pcube(int * const pi); 實參為 int * 型別, 不能為const int * 型別。 可以通過修改* pi 的值修改實參指向的物件的值, 不可以給pi賦值。
void reset(int &r); 實參為int型別, 不可以為const int 型別。 可以通過修改r的值, 從而修改實參的值。
void print(const int &r); 實參可以為int型別, 也可以為const int型別, 不可以修改r的值。
#include
using
namespace
std;
int fun1(int i);
int fun2(const
int i);
int pfun1(int *pi);
int pfun2(const
int *pi);
int pfun3(int *const pi);
int rfun1(int &r);
int rfun2(const
int &r);
int main()
//可以修改形參i
int fun1(int i)
//不可以修改形參i
int fun2(const
int i)
int pfun1(int *pi)
//可以修改pi,但是不可以修改*pi。所以實參可以是int型別,也可以是const int型別
int pfun2(const
int *pi)
//不可以修改pi,但是可以修改*pi,所以實參型別只能是int型別
int pfun3(int *const pi)
//可以修改r,實參型別只能是int型別
int rfun1(int &r)
//不可以修改r,實參型別可以是int型別,也可以是const int型別
int rfun2(const
int &r)
函式過載 const形參 預設實參
過載 同乙個作用域內的幾個函式名字相同但是形參列表不同,我們稱之為過載 overload 不能定義兩個函式除了返回型別外其他所用的要素都相同。過載和const形參 預設實參 呼叫含有預設實參的函式時,可以包含該實參,也可以省略該實參。注意,一旦某個形參被賦予了預設值,它後面的所有形參都必須有預設值。...
C語言函式 形參和實參
形參 也叫形式引數 在定義函式名和函式體的時候使用的引數,他沒有資料,可以看做乙個佔位符,只能等到函式被呼叫時接收傳遞進來的資料,所以稱為形式引數 實參 也叫實際引數 在呼叫時傳遞給函式的引數,即傳遞給被呼叫函式的值,會被被呼叫函式內部使用,所以稱為實際引數 形參和實參的區別 1 形參變數在函式未被...
c 實參和形參
c c 中的實參和形參 今天突然看到一道關於形參和實參的題,我居然不求甚解。藐視過去在我的腦海裡只有乙個引數的概念,對於形參和實參的區別還真的不知道,作為學習了幾年c 的人來說,真的深深感覺對不起自己對不起c 老師 t。t 我覺得只要明白了值傳遞和位址傳遞,就應該能明白形參和實參的具體工作細節了。1...