c語言基礎知識 變數

2021-08-09 10:07:48 字數 2102 閱讀 5880

a=3;

我們今天主要來談談變數,就是『a』

1. 變數是什麼

2. 變數的三要素

int a;

讓我們乙個乙個來解釋

變數的型別

變數名變數的定義。

3. 一點思考

為什麼整形變數會存在溢位現象呢?

溢位:

int a= 2147483647

int b = a+1;

最終 b = -2147483648

為什麼浮點型變數會有精度的丟失現象呢?

float a = 12.0f;

float b = 11.9;

float c = a - b;

最終c=0.1000003815

1. 預先了解,十進位制轉換為二進位制,原碼,補碼。

十進位制正整數如果轉換為二進位制

52(10)=110100(2進製)

十進位制小數如果轉換為二進位制

原碼補碼

2. 了解為什麼整形變數的表示會發生溢位

先計算int的表示範圍

為什麼會溢位呢

3. 了解為什麼浮點型變數會有精度丟失

12-11.9=?

* 將11.9化為二進位制為「1011. 1110011001100110011001100…」,可以看出11.9轉換為二進位制是乙個無窮的小數,按照浮點數的儲存形式(ieee754)的時候需要捨棄一些二進位制。所以在計算機中永遠無法準確儲存11.9這個數字。所以計算時會產生誤差。

* 擴充套件,如果有興趣,可以具體了解一下ieee754是如何規定浮點數的儲存的。

1.重新看一遍變數究竟是什麼?

2.指標究竟是什麼呢

int *p;

那麼指標前面的型別有什麼作用呢?

1.自動型別轉換。

出現場景

同一句語句或表示式如果使用了多種型別的變數和常量(型別混用)

規則

double ←── float 高

↑ long

↑ unsigned

↑ int ←── char,short 低

1.圖中橫向箭頭表示必須的轉換,如兩個float型數參加運算,雖然它們型別相同,但仍要先轉成double型再進行運算,結果亦為double型。縱向箭頭表示當運算子兩邊的運

2.算數為不同型別時的轉換,如乙個long 型資料與乙個int型資料一起運算,需要先將int型資料轉換為long型, 然後兩者再進行運算,結果為long型。所有這些轉換都是由系統自動

進行的, 使用時你只需從中了解結果的型別即可。這些轉換可以說是自動的。

其他場景中出現自動型別轉換

1.在程式中將資料用printf函式以指定格式輸出時,當要輸出的鹽據型別與輸出格式不符時,便自動進行型別轉換

2.賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給他。

3.函式呼叫中引數傳遞時,系統隱式地將實參轉換為形參的型別後,賦給形參。

4.函式有返回值時,系統將隱式地將返回表示式型別轉換為返回值型別,賦值給呼叫函式。

舉個栗子

1.例子1

#include 

int main(void)

2.例子2
int main(void)

3.例子3
int main(void)

2.強制型別轉換

出現場景:

需要將乙個表示式轉換成指定型別。

規則 強制型別轉換是通過型別轉換運算來實現的。

其一般形式為: (型別說明符) (表示式)

其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別

舉個栗子

#include

int main (void)

基礎知識 變數型別

為何變數值 即記錄的資料 要區分型別呢?變數值使用來記錄事物狀態的,而事物的狀態 是各種各樣的,所以對應著就應該用不同型別的值 去記錄這些狀態 作用 記錄描述性質的狀態 定義 在 中包含一串字元 name egon 單行字串 多行字串 msg aaaa bbbb ccc 外層用單引號,內層就應該用雙...

C 基礎知識 變數儲存位置

1.棧區 stack 程式執行時由編譯器自動分配 存放 函式的引數值,區域性變數的值。儲存連續,其操作方式類似於資料結構中的棧。棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的,所以空間有限,windows下大多1 2m。2.堆區 heap 在記憶體開闢另一塊儲存區域。一般由程式設...

C 基礎知識 變數與常量

1.定義變數的語法 資料型別 變數名 定義乙個年齡的變數,年齡是整數,所以變數定義如下 int age 系統會根據資料型別,在記憶體中分配不同大小的儲存空間 每個資料型別後面,可以定義多個變數,如 定義姓名 家庭位址 籍貫 民族 string name,address,origin,national...