#變數的屬性
今天講這個變數的屬性,實際也就是變數的分類,但自己感覺吧,不是特別的完整,但學到的也就這些吧,歡迎大佬補充。
直奔主題!
首先先認識一下變數從定義的位置來分:
1.塊變數
塊變數:在語句塊中定義的變數,也只能在語句塊中使用。
語句塊:裡面,像if語句啊,while,for,do啊,它們的大括號內都是屬於語句塊內,單獨的乙個大括號也屬於塊。
作用域:從定義到語句塊結束
2.區域性變數
區域性變數:在函式(包括main函式)裡面語句塊外面定義的變數 形參也是區域性變數
作用域:從定義開始到本函式執行結束
void
func
(int x)
3.全域性變數
全域性變數:在全域性域中 函式外定義的變數
作用域:整個程式
#incude
double pi =
3.14
;//全域性變數
intmain()
注意: 在不同的作用域下面可以定義同名的變數,在訪問同名變數時遵循區域性優先原則
區域性優先原則:在搜尋變數時先找塊變數 ,如果沒有塊變數則查詢區域性變數 如果沒有,則查詢全域性變數。
那麼 就有問題了,當區域性變數和全域性變數重名時,我想訪問全域性變數怎麼辦?有三種方法,往下看:
1.在函式中提供語句塊,往其中注入全域性變數
最為便利,建議使用
2.使用函式訪問
int getglobarval (
)
3.提供乙個全域性的指標
type *p =
&glovar_val;
##變數的儲存修飾
1.auto 自動變數
預設就是自動變數 一般都省略了
2. static 靜態變數
static修飾的區域性變數叫靜態區域性變數;
特點:1.static修飾的區域性變數儲存在全域性資料區(普通的區域性變數儲存在棧區)
2.靜態區域性變數不管函式有沒有被呼叫,它的記憶體都一直存在,不會隨著函式的結束而釋放記憶體,也就是靜態區域性變數直到程式結束才釋放記憶體,且它只會在函式第一次被呼叫時定義一次
static 修飾的全域性變數叫靜態全域性變數
特點:1.static修飾的全域性變數不能被檔案外的程式訪問到,(普通全域性變數可以)。所以它可以達到隱藏全域性變數的目的
static還可以修飾函式
特點:只能在當前檔案中呼叫該函式,其他檔案也可通過#include 檔案頭訪問
3.register 暫存器變數4.volatile 易變變數5.const 唯讀變數
const 修飾的區域性變數儲存在棧區 可以用指標修改
const 修飾的全域性變數儲存在**區 不能修改
const int num = 10; 和 10 沒啥區別的
直接修改 編譯報錯 通過指標修改 導致 段錯誤 核心已轉儲
const 修飾指標
const char * s 它表示 *s 唯讀 也就是 不能修改 s位址 指向的資料
等同於 char const *s
char *const s 它表示 s 唯讀 不能修改s儲存的位址值
const char *const s 它表示 *s 和 s 都是唯讀內容 都不可修改
6.extern 外部的
1.區域性變數和全域性變數重名時 ,往語句塊中注入全域性變數
2.宣告變數和函式 表示它在其他檔案中定義過
就這麼多吧,在其他地方有把自動變數說成區域性變數的,extern修飾說成全域性變數的,我不是很能理解的,我覺得今天這個要更合理一些,仍有一些迷茫,大佬幫忙指點一下啊。
上一期的查詢演算法,可以用遞迴寫了,下次寫查詢演算法補上,估計就下個周
溜溜溜 閃現!!!
變數屬性的總結
變數的屬性有五種 1 名字 必須顯示說明 2 型別 必須顯示說明 3 儲存類別 預設方式或顯示說明 使用 auto register static extren 4 作用域 由儲存類別決定 5 生存期 由儲存類別決定 前兩種不必解釋了,顧名思義。下面詳細區分後三種概念 定義 指系統對變數儲存方式的規...
條件變數屬性 時鐘屬性
條件變數有兩個屬性 程序共享屬性 時鐘屬性。1 程序共享屬性 條件變數與互斥量的共享屬性的用法一樣 int pthread condattr init pthread condattr t attr int pthread condattr destroy pthread condattr t at...
05 變數屬性
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 14.04 gcc版本 4.8.4 一 c語言的變數屬性 c語言中的變數可以有自己的屬性 在定義變數的時候可以加上 屬性 關鍵字 屬性 關鍵字指明變數的特有意義 語法 property type var name...