當前位置:首頁 » 編程語言 » conststaticc語言

conststaticc語言

發布時間: 2022-09-13 04:21:43

① const和static const的區別

const和static const的區別:

一、全局的區別

const規定變數在全局中是只讀的變數,並且它的值無法被修改。

static const規定變數在當前的模塊中是只讀的變數,無法再全局中被其他模塊讀取。

二、文件的區別

const定義的指針,不賦初值編譯時不報錯,在初始化時應說明指針的指向。

static const不能在定義對象時對變數初始化,就是不能用構造函數來初始化。

三、函數的區別

const只能通過構造函數初始化列表進行,並且必須有構造函數。

static const是靜態的,屬於類的靜態成員函數。

四、類的區別

const數據成員只在某個對象生存期內是常量,而對於整個類而言卻是可變的。因為類可以創建多個對象,不同的對象其const數據成員的值可以不同,所以不能在類聲明中初始化const數據成員。

static const初始化在類體外進行,初始化時不加該成員的訪問許可權控制符private,public等,並且初始化時使用作用域運算符來標明它所屬類,因此,靜態數據成員是類的成員,而不是對象的成員。

c語言中const、static關鍵字的用法

const是指常數,這種數存放在rom中,也就是硬碟里,只有使用的時候才讀取到內存。static類型的是局部靜態數據,首先他肯定是局部變數,但是他的生存期是全局的。const數不能被修改,也不能是局部變數。static一般用於局部變數,但是他可以被修改,並且退出引用他的函數體後變數依舊存在,直到下一次引用時數值不變化。

③ 關鍵字static、Const、Volatile的作用是什麼

在C語言中,關鍵字static有三個明顯的作用:
1). 在函數體,一個被聲明為靜態的變數在這一函數被調用過程中維持其值不變。
2). 在模塊內(但在函數體外),一個被聲明為靜態的變數可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變數。
3). 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。
大多數應試者能正確回答第一部分,一部分能正確回答第二部分,同是很少的人能懂得第三部分。這是一個應試者的嚴重的缺點,因為他顯然不懂得本地化數
據和代碼范圍的好處和重要性。
我只要一聽到被面試者說:「const意味著常數」,我就知道我正在和一個業余者打交道。去年Dan Saks已經在他的文章里完全概括了const的所有用法,因此ESP(譯者:Embedded Systems Programming)的每一位讀者應該非常熟悉const能做什麼和不能做什麼.如果你從沒有讀到那篇文章,只要能說出const意味著「只讀」就可以了。盡管這個答案不是完全的答案,但我接受它作為一個正確的答案。(如果你想知道更詳細的答案,仔細讀一下Saks的文章吧。)如果應試者能正確回答這個問題,我將問他一個附加的問題:下面的聲明都是什麼意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最後一個意味著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。如果應試者能正確回答這些問題,那麼他就給我留下了一個好印象。順帶提一句,也許你可能會問,即使不用關鍵字 const,也還是能很容易寫出功能正確的程序,那麼我為什麼還要如此看重關鍵字const呢?我也如下的幾下理由:
2). 通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。
3). 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現。
一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用保存在寄存器里的備份。下面是volatile變數的幾個例子:
1). 並行設備的硬體寄存器(如:狀態寄存器)
2). 一個中斷服務子程序中會訪問到的非自動變數(Non-automatic variables)
3). 多線程應用中被幾個任務共享的變數
假設被面試者正確地回答了這是問題(嗯,懷疑這否會是這樣),我將稍微深究一下,看一下這傢伙是不是直正懂得volatile完全的重要性。
int square(volatile int *ptr){return *ptr * *ptr;}下面是答案:
1). 是的。一個例子是只讀的狀態寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它。
2). 是的。盡管這並不很常見。一個例子是當一個中服務子程序修該一個指向一個buffer的指針時。
3). 這段代碼的有個惡作劇。這段代碼的目的是用來返指針*ptr指向值的平方,但是,由於*ptr指向一個volatile型參數,編譯器將產生類似下面的代碼:
int square(volatile int *ptr){int a,b;a = *ptr;b = *ptr;return a * b;}由於*ptr的值可能被意想不到地該變,因此a和b可能是不同的。結果,這段代碼可能返不是你所期望的平方值!正確的代碼如下:

④ c語言中const 與static的分析

const 僅僅是說在內存分配的同時就被初始化了,之後就不能更改了。
我覺得這分析不見得就對,使用全局的const變數固然能達到目的,但是太多的全局變數造成的結果是職責不明確,程序邏輯令人費解。更好的做法是,它適合在哪裡就在哪裡,比如有一個Circle類表示圓,裡面有個const static double PI(static的目的是為了所有該類對象共享這個變數,否則會為每個該類的對象分配一個pi),表示圓周率,我覺得放在Circle類中是很合理,但是把它作為全局變數,在小程序里固然還是結果清晰,一旦程序大了,分成好幾十個文件了,邏輯就亂了

⑤ 關於C語言中return以及static const的問題

return作為一個函數的返回值的
而static const是定義靜態變數的

⑥ const在C語言中有哪些用法

const是一個C語言的關鍵字,它限定一個變數不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。另外CONST在其他編程語言中也有出現,如C++、PHP5、C#.net、HC08
C。
(1)可以定義const常量,具有不可變性。
例如:const
int
Max=100;
Max++會產生錯誤;
(2)便於進行類型檢查,使編譯器對處理內容有更多了解,消除了一些隱患。
例如:
void
f(const
int
i)
{
.........}
編譯器就會知道i是一個常量,不允許修改;
(3)可以避免意義模糊的數字出現,同樣可以很方便地進行參數的調整和修改。
同宏定義一樣,可以做到不變則已,一變都變!
如(1)中,如果想修改Max的內容,只需要:const
int
Max=you
want;即可!
(4)可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。
還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;
例如:
void
f(const
int
i)
{
i=10;//error!
}

⑦ 在C語言中,register,const,static,extern分別都是什麼意思,有什麼用

register修飾符暗示編譯程序相應的變數將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。
const限定一個變數不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。
static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。
extern可以置於變數或者函數前,以表示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義。另外,extern也可用來進行鏈接指定。

⑧ c語言中const、static關鍵字的用法

  1. const是constant的縮寫,「恆定不變」的意思。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。

  2. const可以修飾變數,函數的入參,函數的返回值

  3. static第一個作用:隱藏

    當我們同時編譯多個文件時,所有未加static前綴的全局變數和函數都具有全局可見性。

  4. static的第二個作用是保持變數內容的持久。存儲在靜態數據區的變數會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。

  5. static的第三個作用是默認初始化為0。其實全局變數也具備這一屬性,因為全局變數也存儲在靜態數據區。在靜態數據區,內存中所有的位元組默認值都是0x00,某些時候這一特點可以減少程序員的工作量。

⑨ C++面相對象的static const成員變數有什麼作用是靜態常量,不是單獨的const或者static。

靜態常量是類的變數的一種,首先是靜態的,表示其在程序開始的時候就有了內存,是屬於類的。
然後是常量,表示其值只能被賦一次。它是唯一可以這么賦值的成員函數,static const int a=11;
或者還能在類聲明外面賦值,const int ATest::a=111;

⑩ c++ const和static有什麼區別

系統不知道怎麼回事,我接著hanwt139繼續補充。
static的作用是把一個變數(這里的變數和上面說的概念一樣,
都是泛指)設置為「靜態」。
一般情況下,我們在子程序中定義的變數,在這個子程序運行
結束的時候都會被銷毀,其值就丟失了。
如果用了static,則這個變數的值在子程序結束後依然被保留
。這個變數是否被銷毀我不知道,但其值肯定被保留了。當你下次
運行該子程序時,該變數初始就為你最後一次調用子程序後該變數
的值。
但是,要注意,他和全局變數還是有區別的。在其他子程序中該
變數不能被使用。

熱點內容
手機怎樣給程序加密軟體 發布:2025-01-12 06:47:11 瀏覽:824
地平線最高畫質筆記本要什麼配置才能玩 發布:2025-01-12 06:47:10 瀏覽:369
原神過主線任務腳本 發布:2025-01-12 06:34:51 瀏覽:513
醫保電子密碼在哪裡找到 發布:2025-01-12 06:34:38 瀏覽:348
安卓手機有網卻不能使用怎麼辦 發布:2025-01-12 06:25:20 瀏覽:212
arm存儲器映射 發布:2025-01-12 06:25:12 瀏覽:250
安卓系統個人字典有什麼用 發布:2025-01-12 06:13:37 瀏覽:929
geventpython安裝 發布:2025-01-12 06:13:34 瀏覽:339
放鬆解壓助睡眠直播 發布:2025-01-12 06:13:00 瀏覽:829
車載wince和安卓哪個好用 發布:2025-01-12 05:58:18 瀏覽:840