C語言一些基本概念

2021-10-24 04:06:42 字數 2718 閱讀 7407

exit(0):正常執行程式並退出程式;

exit(1):非正常執行導致退出程式;

return():返回函式,若在主函式中,則會退出函式並返回一值。

再細化一點

1.return返回函式值,是關鍵字; exit 是乙個函式。

2.return是語言級別的,它表示了呼叫堆疊的返回;而exit是系統呼叫級別的,它表示了乙個程序的結束。

3. return是函式的退出(返回);exit是程序的退出。

4. return是c語言提供的,exit是作業系統提供的(或者函式庫中給出的)。

5. return用於結束乙個函式的執行,將函式的執行資訊傳出個其他呼叫函式使用;exit函式是退出應用程式,刪除程序使用的記憶體空間,並將應用程式的乙個狀態返回給os,這個狀態標識了應用程式的一些執行資訊,這個資訊和機器和作業系統有關,一般是 0 為正常退出, 非0 為非正常退出。

6. 非主函式中呼叫return和exit效果很明顯,但是在main函式中呼叫return和exit的現象就很模糊,多數情況下現象都是一致的。

函式名: exit()

所在標頭檔案:stdlib.h(如果是」vc6.0「的話標頭檔案為:windows.h)

功 能: 關閉所有檔案,終止正在執行的程序。

exit(1)表示異常退出.這個1是返回給作業系統的。

exit(x)(x不為0)都表示異常退出

exit(0)表示正常退出

exit()的引數會被傳遞給一些作業系統,包括unix,linux,和ms dos,以供其他程式使用。

參考部落格:

陣列:陣列是用於儲存多個相同型別資料的集合。

賦值、儲存方式、求sizeof、初始化等不同

指標陣列:char *p[4];它實際上是乙個陣列,陣列的每個元素存放的是乙個指標型別的元素。

陣列指標:char (*p)[4];它實際上是乙個指標,該指標指向乙個陣列。

陣列傳參時,會退化為指標,所以我們先來看看什麼是退化!

(1)退化的意義:c語言只會以值拷貝的方式傳遞引數,引數傳遞時,如果只拷貝整個陣列,效率會大大降低,並且在引數位於棧上,太大的陣列拷貝將會導致棧溢位。

(2)因此,c語言將陣列的傳參進行了退化。將整個陣列拷貝乙份傳入函式時,將陣列名看做常量指標,傳陣列首元素的位址。

cpu位數(32位數4位元組,64位數8位元組)

作業系統位數(32位數4位元組,64位數8位元組)

編譯器的位數(32位數4位元組,64位數8位元組)

當上述3種位數不同,取最小的位數。

比如,如果cpu、系統都是64位的,但編譯器是32位的,那麼很顯然指標只能是32位4位元組大小。

全域性變數靜態儲存方式.區域性變數放在棧

參考部落格:變數作用域和生存期

儲存說明符auto,register,extern,static,對應兩種儲存期:自動儲存期和靜態儲存期。

auto和register對應自動儲存期。具有自動儲存期的變數在進入宣告該變數的程式塊時被建立,它在該程式塊活動時存在,退出該程式塊時撤銷。

關鍵字extern和static用來說明具有靜態儲存期的變數和函式。用static宣告的區域性變數具有靜態儲存持續期(static storage duration),或靜態範圍(static extent)。雖然他的值在函式呼叫之間保持有效,但是其名字的可視性仍限制在其區域性域內。靜態區域性物件在程式執行到該物件的宣告處時被首次初始化。

四個位元組,二進位制儲存,符號位,底數字,指數字。

switch後可以不是整型,但與它匹配時會自動轉換成整型。 case後必須是整型(含字元型)。

1.修飾全域性函式和全域性變數:

特點:隱藏,只能在本原始檔使用

2. 修飾函式的區域性變數:

特點:static變數存放在靜態儲存區,所以它具備永續性和預設值0

只執行一次,執行一開始就開闢了記憶體,記憶體放在全域性,但是區域性可見

內存在程式編譯的時候就已經分配好,這塊內存在整個計算機記憶體中位於較低的位址,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料、全域性資料和常量。

在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限,棧記憶體儲存資料是從高位址往低位址儲存。

堆區亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在適當的時候用free或delete釋放記憶體。動態記憶體的生存期可以由我們決定,如果我們不釋放記憶體,程式將在最後才釋放掉動態記憶體。 但是,良好的程式設計習慣是:如果某動態記憶體不再使用,需要將其釋放掉,否則,我們認為發生了記憶體洩漏現象。堆記憶體一般處於記憶體較低的位址(但是堆記憶體的記憶體位址高於靜態記憶體區的記憶體位址),堆記憶體儲存資料是從低位址往高位址儲存資料.

【規則1】用malloc 或new 申請記憶體之後,應該立即檢查指標值是否為null。防止使用指標值為null 的記憶體。

【規則2】不要忘記為陣列和動態記憶體賦初值。防止將未被初始化的記憶體作為右值使用。

【規則3】避免陣列或指標的下標越界,特別要當心發生「多1」或者「少1」操作。

【規則4】動態記憶體的申請與釋放必須配對,防止記憶體洩漏。

【規則5】用free 或delete 釋放了記憶體之後,立即將指標設定為null,防止產生「野指標」。

堆是一種特殊的完全二叉樹,堆中某個節點的值總是不大於或不小於其父節點的值

詳情參考部落格:堆和棧的區別

C 一些基本概念

建構函式的作用是對物件本身做初始化工作,也就是給使用者提供初始化類中成員變數的一種方式。析構函式是釋放物件執行期間所申請的資源。函式的過載,過載構成的條件 函式的引數型別不同 引數個數不同,才能構成函式的過載 在乙個類中 注意,只有函式的返回型別不同是不能構成函式的過載。在函式過載時,要注意函式帶有...

C語言中的一些基本概念

1。變數的聲名與定義 宣告乙個變數意味著向編譯器描述變數的型別,但並不為變數分配儲存空間。定義乙個變數意味著在宣告變數的同時還要為變數分配儲存空間。在定義乙個變數的同時還可以對變數進行初始化。a.對於區域性變數來說,聲名即為定義,也可以說區域性變數通常只定義不宣告或者,區域性變數聲名定義沒有區別。聲...

linux OS一些基本概念

1.什麼是os?好簡單好x的問題,可是如果真的要自己用稍微官方稍微正規的語言或文本來回答,我真的能回答清楚嗎?好吧,我先來用自己的語言來回答。再去找點官方的定義。我自己的回答 os就是乙個可以管理並且相對合理分配計算機資源的軟體。官方回答 作業系統 英語 operating system,簡稱os ...