C語言學習日記6

2022-09-13 00:27:21 字數 2908 閱讀 3294

1、資料型別

1.1 基本資料型別

資料型別分2類:基本資料型別+復合型別

基本型別:char short int long float double

復合型別:陣列 結構體 共用體 類(c++)

1.1.1記憶體占用與sizeof運算子

資料型別就好像乙個個的模子,這個模子例項化出c語言的變數。變數儲存在記憶體中,需要占用一定的記憶體空間。乙個變數占用多少空間由變數的資料型別決定的。

每種資料型別,在不同的機器平台上占用記憶體是不同的。我們一般講的時候都是以32位cpu為預設的硬體平台來描述:

char 1位元組  short 2  int 4  long 8 float 4 double 8

1.1.2 有符號數和無符號數

對於char short int long 等整型型別的數,都分有符號數和無符號數。而對於float和double這種浮點型數來說,只有有符號數,沒有無符號數。

1.1.3 整型數和浮點型數儲存方式上的不同  

對於c語言來說,數(變數)是儲存在記憶體中乙個個的格仔中的。儲存的時候是以二進位制方式儲存的,對於有符號數和無符號數來說,儲存方式是不同的。譬如對於int來說

unsigned int無符號數,32位全部用來存數的內容,所以表示的數的範圍是0-4294967295(2^32-1)

int 有符號數,32位中最高位用來存符號(0表示正數,1表示負數),剩餘的31位用來存資料。所以可以表示的範圍-2^31 ~ 2^31-1 

結論:從絕對數值來說,無符號數所表示的範圍要大一點。

對於float和double這種浮點型別的數,它在記憶體中的儲存方式和整型數不一樣。所以float和int相比,雖然都是4個位元組但是在記憶體中儲存的方式完全不同。所以同乙個4位元組的記憶體,如果儲存時是按照int存放的,取的時候一定要按照int型方式去取。

總結:訪問方式上主要有兩種,一種是整型一種是浮點型,這兩種訪問方式完全不同,沒有任何關聯,所以是絕對不能隨意改變乙個變數的訪問方式。在整型和浮點型之內,譬如說4中整型char、short、int、long只是範圍大小不同而已,儲存方式是一模一樣的。float和double儲存原理是相同的,方式上有差異,導致了能表示的浮點型的範圍和精度不同。

1.2 空型別(關鍵字void)

c語言中的void型別,代表任意型別,而不是空的意思。任意型別的意思不是說想變成誰就變成誰,而是說它的型別是未知的,是還沒指定的。

void * 是void型別的指標。含義是:這是乙個指標變數,該指標指向乙個void型別的數。void型別的數就是說這個數有可能是int,有可能是float,也有可能是個結構體,那種型別都有可能,只是我當前不知道。

void型指標的作用就是,程式不知道那個變數的型別,但是程式設計師自己心裡知道。程式設計師如何知道?當時給這個變數賦值的時候是什麼型別,現在取的時候就是什麼型別。這些型別對不對,能否相容,完全由程式設計師自己負責。編譯器看到void就沒辦法幫你做型別檢查了。

在函式的引數列表和返回值中,void代表的含義是:乙個函式形參列表為void,表示這個函式呼叫時不需要給它傳參的。返回值型別是void,表示這個函式不會返回乙個有意義的返回值。所以呼叫者也不要想著去使用該返回值。

c語言設計基本理念:

c語言相信程式設計師永遠是對的,c語言相信程式設計師都是高手,c語言賦予了程式設計師最大的權利。所以c語言的程式設計師必須自己對程式的對錯負責,必須隨時腦袋清楚,知道自己在幹嘛。

#include

int main(void)

1.3 資料型別的轉換

c語言中有各種資料型別,寫程式時需要定義各種型別的變數,這些變數需要參與運算。c語言有乙個基本要求就是:不同型別的變數是不能直接運算的。就是說,int和float型別的變數不能直接加減乘除,必須先把兩種型別專程相同的型別才可以。

1.3.1 隱式轉換

就是自動轉換,是c語言缺省會進行的,不用程式設計師干涉。

c語言理念:隱式型別轉換預設朝精度更高、範圍更大的方向轉換。

1.3.2 強制轉換

c語言預設不會這麼做,但程式設計師我想這麼做。

1.4 c語言與bool型別(只有兩個值0,1,就是真和假)

c語言中原生型別沒有bool,c++中有。在c語言中如果需要使用bool型別,可以用int來代替。

2、變數和常量

2.1、變數

2.1.1、區域性變數

定義在函式內部的變數

2.1.1.1、普通區域性變數auto

2.1.1.2、靜態區域性變數static

2.1.1.3、暫存器區域性變數register

一般只在核心或者啟動**中,需要反覆使用同乙個變數這種情況下才會使用

2.1.2、全域性變數

定義在函式外面的變數

2.1.2.1、普通全域性變數

2.1.2.2、靜態全域性變數(遮蔽作用,單個原始檔獨用)

2.1.2.3、跨檔案引用全域性變數extern

對比:1、定義同時沒有初始化,則區域性變數的值是隨機的,而全域性變數的值預設為0。

2、使用範圍上:全域性變數具有檔案作用域(檔案範圍內,定義位置之後有效),而區域性變數只有**塊作用域。**塊就是用{}擴起來的一段**。

3、變數的分配位置:全域性變數分配在資料段上,而區域性變數分配在棧上。

資料段:資料段存的是數,像全域性變數就是存在資料段的。

**段:存的是程式**,一般是唯讀的。

棧stack:先進後出。c語言中區域性變數就分配在棧中。程式執行時,區域性變數放入棧中,各個區域性變數和棧中的位址相關聯就是區域性變數的誕生,出了**塊,變數位址釋放,變數就死了。

插一段linux gcc使用。

多檔案c語言專案

1、簡單的c語言程式只有乙個c檔案a.c,編譯的時候gcc a.c -o a

2、複雜的c語言程式是由多個c檔案構成的。譬如乙個程式中有2個c檔案,編譯的時候gcc a.c b.c -o ab

c語言學習日記(九)

上三角矩陣指主對角線以下的元素都為0的矩陣 主對角線為從矩陣的左上角至右下角的連線。本題要求編寫程式,判斷乙個給定的方陣是否上三角矩陣。輸入格式 輸入第一行給出乙個正整數t,為待測矩陣的個數。接下來給出t個矩陣的資訊 每個矩陣資訊的第一行給出乙個不超過10的正整數n。隨後n行,每行給出n個整數,其間...

C語言學習日記8

4.1.1 程式執行為什麼需要記憶體?4.1.1.1 計算機程式執行的目的。4.1.1.2 計算機程式執行過程 4.1.1.3 馮諾依曼結構和哈佛結構 馮諾依曼結構是 資料和 放在一起。哈佛結構是 資料和 分開存在。什麼是 函式 什麼是資料 全域性變數 區域性變數。4.1.1.4 動態記憶體dram...

C語言學習日記4

1 指標型別 在定義指標的時候 資料型別 指標名 這個地方的資料型別,是指指標指向的變數的資料型別。必須匹配!在定義的時候可以這麼定義 int pint float pfloat char pchar double pdouble int p 理解方法,首先看到p,這個是變數名,其次,p前面有個 說...