const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址不得改動。
宣告的時候必須初始化
,一旦宣告,這個值將不能被改變
int val =
100;
const
char a;
//錯誤,未初始化
const
int b = val;
//正確,此時a為乙個常量,不能被改變
b =28
;//錯誤,a為常量,不能當作左值
常量在後,指標的指向不可以修改
常量在前,指標的指向可以修改
主要看const修飾**
const
int*p=
&a;//const修飾*p(指標指向的值不可以修改)常量指標
int*
const p=
&a;//const修飾p(指標的指向不可以修改)指標常量
const
int*
const p=
&a;//都修飾(都不能修改)
void
test1
(int a,
char
*b,float
&c);
//普通入參
void
test2
(const
int a,
const
char
*b,const
float
&c);
//const修飾的入參
const
intfun1
(int a)
;const
char
*fun2
(char b)
;const person &
fun3
(person p)
;//person是自定義的類。返回值採用引用 不常用
//主調函式
intmain()
class
person
;int person::
fun3
(int c)
const
const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體位址,因此等同於常量。但對於復合型別的資料(主要是物件和陣列),變數指向的記憶體位址,儲存的只是乙個指標,const只能保證這個指標是固定的,至於它指向的資料結構是不是可變的,就完全不能控制了。可以修改復合資料型別的的屬性。
class
person
fun函式其實有兩個引數:
void fun(person *this, int a);
第乙個引數是person *const this(this 就代表指向該函式所作用的物件的指標)
在fun1函式後面加const相當於:
void fun(person *const this, int a);
此時指標的指向不能改變
面試筆記1
今天開始準備找實習了,開始準備實習的東西了。接下來開始寫今天看到的小知識。1.宣告,定義,初始化 宣告是指extern int i 定義是指int i 初始化int i 0 區別在於,宣告不分配儲存空間,在這裡編譯的時候是不管的,只有當需要用到i的時候才去檢查。定義的話,就分配一塊空間給它。初始化的...
面試筆記3
有關函式宣告的空間問題 乙個函式在宣告後如果不寫函式體是不會分配空間的,所以實現這個函式也就相當於初始化函式這個變數,同時也就引申出了變數如果只宣告的話是不會分配的空間的?可以這麼認為,因為靜態變數跟全域性變數都是自動初始化為0的。另外在c語言中 void fun 等同於 void fun 在c 語...
實習面試筆記
fib資料庫事務隔離級別有4個 由低到高依次為 read uncommitted,讀到了未提交的事物,只是 add 還沒有 commit read committed,讀到了上一次的commit,也就是說還沒有更新 最新的commit repeatable read,保證讀取最新的 commit,為...