C語言的變數域和指標

2021-07-13 18:28:35 字數 2448 閱讀 5514

可以使用某個變數名的所有語句的綜合叫這個變數的作用域。每個變數都有它自己的作用域,在函式中的變數,或者函式形參中的變數,都是區域性變數,他們的作用域就是當前函式,而全域性變數的宣告在所有函式之外,全域性變數的作用域是程式中的所有語句,在當前程式的各個地方都能訪問到,全域性變數不初始化的話,系統會自動初始化為0,而區域性變數則不確定。

塊變數宣告在某個語句塊內部,塊變數的作用域是語句塊內部的所有語句。

不同型別的變數可以重名,某一條語句使用的重名變數是距離它最近的變數。在區域性範圍內,如果定義與全域性變數同名的區域性變數,在此區域性範圍內會遮蔽全域性變數。

使用extern關鍵字宣告全域性變數,可以在原始檔中使用其他原始檔中宣告的全域性變數。

變數的生命週期指變數可以被使用的時間範圍,全域性變數的生命週期是整個程式執行期間,區域性變數的生命週期是函式執行期間,塊變數的生命週期是語句塊的執行期間。

auto關鍵字可以用來宣告區域性變數,所有區域性變數都自動是auto型別。static關鍵字可以用來宣告變數,static關鍵字可以把區域性變數和塊變數的生命週期延長到整個程式執行期間,static區域性變數和塊變數也會被初始化成0。

static全域性變數的作用域是宣告它的那個檔案內部的所有語句,用static宣告的全域性變數不能跨檔案使用。

static區域性變數的初始化工作在程式開始執行的時候只執行一次,static宣告的區域性變數在作用域外不能使用。

/*

靜態變數

*/#include

int f()

int f1()

int main()

return

0;}

指標變數是用來記錄位址資料的。指標變數包括很多態別,分別對應不同**的位址資料。

指標變數的宣告如下:

int *p_num;

p_num = null;null代表空位址(其實就是數字0)

任何指標變數中或者是有效位址或者是null,既沒有記錄有效位址也沒有記錄null的指標叫做野指標,應避免這種情況。

指標變數前面加*可以表示對應的普通變數,但是是有條件的,就是必須指標裡面放了乙個數的位址。

同一條語句中宣告多個同型別的指標變數時需要在每個變數的前面加*。

所有指標型別的變數都是同樣大小的,都是四個位元組大小,指標型別之間可以任意轉換。不同型別的指標變數之間賦值過程中位址資料不會發生改變,改變的是通過這個位址所能找到的資料以及它的使用方式。

void*也是一種指標型別,這種型別沒有說明位址資料的**,這種型別的指標用來表示普通變數之前要先進行強制型別轉換。

指標變數可以作為函式的形參和返回值使用,可以避免在函式呼叫中,發生大量的資料複製工作。陣列做形參本質上就是指標變數做形參。

函式中如果修改了指標形參對呼叫函式沒有影響,函式中如果通過指標形參修改了普通變數則對呼叫函式有影響。指標變數做形參同樣可以實現資料的雙向傳遞。

指標變數可以作為函式的返回值使用,但絕不可以把區域性變數的位址作為返回值使用。

指標變數支援如下的四則運算:

指標 + 整數,指標 - 整數,指標 - 指標,計算結果不是數學計算結果,與指標型別有關

二級指標變數用來記錄一級指標變數的位址。

二級指標變數可以用來表示三個不同的變數。

指標型別的返回值和二級指標型別的形參可以實現同樣的效果。

二維陣列名稱不可以賦值給二級指標。

#include 

int main() ;

int*p_num = num;

//num = null; 錯誤

p_num = null;

printf("sizeof(num)是%d,sizeof(p_num)是%d\n", sizeof(num), sizeof(p_num));

printf("num是%p,p_num是%p\n", num, p_num);

printf("&num是%p,&p_num是%p\n", &num , &p_num);

return

0;}

#include 

int main()

a[i]==*(a+i)

a[i][j]的二維陣列中,i行j列的陣列元素的位址是*(a+i)+j==a[i]+j

/*

指標練習

*/#include void f(int num, int size)

void neg(int *p_num, int size)

}int main() , loop = 0;

printf("sizeof(num)是%d\n", sizeof(num));

neg(num, 3);

for (loop = 0;loop

<= 2;loop++)

return

0;}

C語言指標和指標變數

一 指標 概念 當定義乙個變數時,系統會為這個變數分配記憶體,比如,int a,系統會給變數a分配一塊記憶體,大小為in型的4個位元組,而且每個位元組都會有乙個編號,這個編號就是位址,這個編號是計算機抽象出來用於訪問資料的,實際上為乙個數字。當計算機需要訪問資料時,會先找到它的位址,再來獲取改位址裡...

c語言指標 指標和指標變數

指標是c語言中乙個重要的概念,也是c語言的重要角色。可以說指標是c的精華所在,學習指標雖然不易,但是只要肯花上時間去反覆的理解和實踐,就一定可以很好的掌握它。一 指標是什麼 指標到底是什麼?我們先舉乙個例子。假設我們在火車站 附近開了一家賓館,這家賓館有三千多間屋子,為了方便管理,我們給每個房間都加...

c語言的指標和指標變數,c語言中的指標和陣列關聯

1 首先什麼是指標,很簡單,就是代表著乙個空間,這個空間指向某個位址,位址裡面又存有我們參加的儲存的值。3 指標變數的定義,取位址運算子和取值運算子 首先是指標變數的定義和賦值 變數型別 用的是指標指向的位址所儲存的值得資料型別 指標變數名 記得必須加 號 乙個位址 一般用取址運算子 在定義和初始化...