const 陣列 作用域

2021-06-16 11:23:12 字數 944 閱讀 2888

const int  a[10] = ;

int i =0;

for(i = 0; i < 5; i++)

a[i] = a[i] +1; // 陣列a裡面內容不能能修改

但若用指標指向陣列位址

int *p =  a ;

for(i = 0; i < 5; i++)

p[i] = p[i] +1;   // 可以修改

這是因為const是對編譯器來說的,

如果你能騙過編譯器,幹什麼都行

const就是乙個掛羊頭賣豬肉的偽君子「常量」

在c++裡,private資料成員依然能通過指標訪問    (類基址+相對偏移)       

但用::運算子不行

const int a = 3;

a = 4;  //不能直接賦值

再看:const int a = 3;

int *p = &a;

*p = 4; //可以賦值,走後門了咯

作用域int main()

int  a = 2;printf("%d\n",a);        //輸出2,而且編譯器不會認為變數重定義而報錯      }

每個變數只在其作用域內有效  

const和volatile 可以同時宣告乙個變數嗎?

void f()

{const int count = 5;

int i = 0;

for(i=0; i大家看一下  我們是不是可以確認 這個迴圈一定做5次呢?

現代編譯器對於這個情況一定是5次  ,在編譯的時候 編譯器就覺得都是const的了 在這個函式中又不可能改變值了 直接用5代替了

const只是表示變數唯讀,不能出現在賦值符號左邊,防止被意外修改,並且編譯器一定會優化,不會每次去記憶體取值。這時候如果外部事件(如中斷服務程式)改變了這個變數的記憶體值,那麼編譯器優化就不會又反應,導致錯誤

boost 作用域陣列

1 boost scoped array 2 特點 1 作用域陣列必須通過動態分配的陣列來初始化 2 作用域陣列的析構函式使用delete操作符來釋放所包含的物件 3 boost scoped array類過載了操作符operator 4 boost scoped array也提供了get 和res...

作用域 作用域鏈

理解 就是一塊 地盤 乙個 段所在的區域 它是靜態的 相對於上下文物件 在編寫 時就確定了 分類全域性作用域 函式作用域 沒有塊作用域 es6有了 作用隔離變數,不同作用域下同名變數不會有衝突 區別1全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了。而不是在函式呼叫時 ...

Python作用域 全域性作用域 區域性作用域

在python中,每個函式都會建立乙個作用域。pythonistas也可能稱函式擁有它們自己的命名空間 namespace 這意味著當在函式體裡遇到變數名 時,python首先在該函式的命名空間中查詢,python包含了一些讓我們檢視命名空間的函式。讓我們寫乙個簡單的函式來探查一下local和glo...