Linux與資料結構 2019 1 31

2021-09-11 23:50:48 字數 2584 閱讀 9005

今天是將之前學過的東西進行簡單的複習。

#代表預處理,預處理的主要功能是進行替換。

include<>的搜尋範圍比之於include""的搜尋範圍要小:尖括號的搜尋範圍是系統內部的庫,而雙引號則包括使用者自定義的庫以及系統的自帶庫。

一般來說,主函式 main 函式是具有引數的,但是一般可以進行省略,主函式的引數是main(int argc, char** ar**),其中的argc代表的是輸入引數的個數,ar**則代表了輸入的引數的內容。

主函式的return表示程式正常退出。

int,long,char,short,double,float。

1個位元組,可代表數的範圍為-128~+127

2個位元組,可代表數的範圍為-32768~+32767

4個位元組,可代表數的範圍為-2147483648~+2147483647

4/8個位元組(根據作業系統的位數所改變:32位系統下佔4個位元組,64位系統下佔8個位元組)。

4個位元組,可以表達小數點後6位的小數。

8個位元組,可以表達小數點後15位的小數。

例:

char a, b, c, d;

a =30

;b = a++

;c =

++a;

d =(a++)*

10;

求d的值為多少?

解:a = 30;b = a++ = 30,a = 31;c = ++a = 32,a = 32;d = (a++)*10 = 320,但是由於char型別的範圍是 -128~+127,故d的值為64。

例:int a = -5,unsigned int b = 1;a+b會使得a向無符號型別提公升,因此結果會大於5。

例:char a = -2;int b = 5;此時將a的前24位補零,因為會進行型別的提公升。

例:int i = 2;int j = 5;i+++j的值是多少?

解:該題相當於(i++)+j,因此值為7,其中的知識是++是左結合的,因此會先結合i,則對於j只剩下乙個+,故結果為7。

另:對於 ++i++,編譯器會報錯:不是可修改的左值。

for、while的效率相同,do while的效率更高一點,因為其是彙編指令。

例:int k;for(k;k=0;) 執行的次數?

解:為零。因為k=0是乙個常量表示式,其返回值是0,因此該迴圈一次也不執行。

例:m = 5;n = 1;–n&&m++的值?

解:為零。因為當n為1時,–n的值為0,因此&&後的m++不會執行,故該答案為零。

1.下列程式無法正常執行,請找出其原因。

void

func

(char

* p)

intmain()

解:其原因是因為func中的p和main中的p不是同乙個p,func中的p在func§;之後就被**,並沒有傳遞給main裡的p,因此main裡的p仍舊是null,故無法進行strcpy操作。

解決方法:在寫func函式時進行二級指標的傳入,即func(char** p)。

2.下列程式可以正常執行的原因:

struct

s;void

func

(s* q)

intmain()

解:因為對於結構體s來說,其中的成員p在建立了結構體後就是存在的,因此當進行func函式時,其中的p就被申請了空間,因此可以進行strcpy操作。

1.堆區(都能進行存放);

2.棧區(存放區域性變數和函式入口位址);

3.字元常量區(存放數字和字串,只能訪問,不能修改);

4.全域性區(又稱靜態區,存放全域性變數作用於整個專案和靜態變數作用於定義檔案);

5.**區(存放**)。

1.申請方式不同:棧區由系統分配**,堆區由使用者分配**,不**則會導致記憶體洩漏;

2.申請效率不同:棧連續但是堆不連續(堆區有乙個儲存位址和大小相同的鍊錶,申請時需要進行遍歷鍊錶);

3.生命週期不同;

4.儲存內容不同;

5.生長方式不同:棧區向下分配,堆區向上分配;棧區分配的變數位址逐漸減小,堆區分配的位址逐漸變大;

6.堆區會產生記憶體碎片。

例:int a[5] = ;*(&a+1)無法執行,原因?

解:由於a是陣列的首位址,&a表示這個陣列的位址,因此&a+1會向後偏移5個int的大小,故無法取到5的後面的那一位,因此會出錯。

例:int a[5] = ;((int)&a+1)的值?

解:值為2。因為&a為陣列位址,但是(int*)將其強轉為int*型別的,因此+1之後變為2的位址,在間接定址得到2。

例:int a[5] = ;((int)((int)&a+1))的值?

解:值為0x02000000。原因:預設在計算機中儲存的方式是小端儲存(低位元組存在低位址)。

資料結構 01 資料與資料結構

1.資料data 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。2.資料元素data elements 資料元素是組成資料的 有一定意義的基本單位,在計算機中通常作為整體進行處理。3.資料物件data object 資料物件是性質相同的資料元素的...

Linux與資料結構 2019 3 23上午

void bsttolist binarytree p tree,binarytree pp head,binarytree pp tail else pp tail p tree bsttolist p tree p right void bsttolist binarytree p tree,b...

Linux資料結構

培養我們的高階思維 資料結構演算法掌握 有利於做上層應用開發 提高程式的執行效率,採用不同的儲存方式,資料的增刪改查操作的效率是不一樣的 主要內容 順序表的基本操作 鍊錶基本操作 增加,刪除,更改,查詢資料 棧和佇列 樹和二叉樹 常見的排序演算法 本質 就是前面c語言學習過的陣列,在陣列的基礎上做了...