第三節課內容

2021-08-20 03:19:44 字數 3230 閱讀 6150

動態庫的封裝:【add.c】

1、建立庫函式的原始檔:vim add.c 和vim sub.c

2、生成目標資料夾:gcc -c add.c -fpic

3、生成動態庫:gcc add.o -o libadd.so -shared

【備註:libadd.so:lib是字首,add是庫的名字,so是字尾,代表的是動態庫】

4、建立呼叫庫函式的原始檔:vim demo.c

5、編譯執行:gcc demo.c ./libadd.so

【備註:這裡的動態庫是在當前目錄下的】

動態庫和靜態庫的區別:

1、靜態庫的字尾是.a,動態庫的字尾是.so.;

2、在編譯鏈結的時候,對於靜態庫,鏈結器是把靜態庫里的函式拷貝到呼叫的地方,呼叫一次   拷貝一次====》對應的實驗現象是:mv libadd.a ../之後,./a.out是可以執行的;而對於動態庫,鏈結器是在呼叫的地方做個「標記」,呼叫的時候再去動態庫里去進行載入!

===》對應的實驗現象:mv libmat.so ../之後,./a.out是不可以執行的;

3、鏈結動態庫的可執行檔案一般比鏈結靜態庫的可執行檔案要小;

4、預設的鏈結方式是動態鏈結!如果要靜態連線的話,加個引數-static

gdb除錯:

主要的作用是用來除錯**的錯誤可以做到單步除錯,或者從乙個斷電執行到下乙個斷點,甚至是改變當前的程式的執行檔案,按照我們設定的條件進行執行!

【countnine.c為例】

gcc -g countnine.c -o demo1;

-g加入除錯資訊到可執行檔案裡面;

==》gcc countnine.c -o demo2

==》比較下demo1和demo2的大小;

==》實際開發中:debug版本和發布版本(release版本)的可執行檔案!

進入到除錯環境中:gdb  debug版的可執行檔案

打斷點:

break  程式的行號

或者break  函式的名字

檢視斷點:

info break

執行:run

單步執行:

step

【遇到函式,會進入到函式裡面進行單步執行】

next

【遇到函式,不會進入到函式裡面進行單步執行】

刪除斷點:

delete  斷點編號

continue

【如果接下來沒有斷點,一直執行到程式結束】

c語言:

用變數a給出下面的定義:

①乙個整型數;

int a;

②乙個指向整型數的指標;

int *a;

③乙個指向指標的指標,它指向的指標是指向乙個整型數;

int **a;

④乙個有10個整型數的陣列;

int a[10];

⑤乙個有10個指標的陣列,該指標指向乙個整型數;

int *a[10];

⑥乙個指向有10個整形陣列的指標;

int  (*a)[10];

⑦乙個指向函式的指標,該函式有個整型引數並返回乙個整型數;

int  (*a) (int);   

⑧乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整型引數並返回乙個整型數;

int (*a[10])(int) ;

定義變數或者解析定義的時候,用到的左右法則:

===》int (*a[10])(int);

首先找到變數名a,先往右看遇到了[ ],說明a是乙個陣列,[ ]裡面是個10,表明陣列中有

10個元素:【這個時候應該條件反射問自己,陣列裡面儲存的是什麼型別的元素?】

再繼續往右看,遇到了),這個時候調轉方向往左看!遇到了*,,表明陣列裡面儲存的變數是指標變數!【這個時候又應該問自己,這個指標變數指向的是什麼地方?】繼續往左看遇到了(,這個時候又要調轉方向,往右看!遇到了(),說明指標變數指向的是函式,()裡面是int,表明函式的形參只有乙個,並且是整型的引數,又調轉方向往左看,遇到int,說明函式的返回值是int型別;

int add(int a,int b);

函式的名字;

函式的形參;

函式的返回值;

左右法則:首先找到變數名,然後往右看,每次遇到括號調轉方向,直到把定**析完畢!

===》強調的是:

1、遇到陣列的時候,應該問自己:這個陣列裡面有多少個元素,元素是什麼型別的;

2、遇到指標的時候,應該問自己:指標指向的變數是什麼型別;

3、遇到函式的時候,應該問自己:函式的形參有沒有,有的話有幾個,分別是什麼型別

的,函式的返回值又是什麼型別的;

左值右值:

int a = 12;

在定義變數的時候就給變數賦值,叫初始化;

int a = 18;

在定義變數之後,再對變數進行操作,比如改變變數的值,叫賦值;    

int a;a = 18;

變數的作用範圍:

全域性變數:作用範圍是整個.c檔案;

區域性變數:作用範圍是{}所在的**塊;

當全域性變數和區域性變數的作用範圍有重合的時候呢?

縣官不如現管!!!

資料型別的取值範圍:

有符號和無符號:

有符號:既可以表示正的,也可以表示負的,最高位只表示正負,不參與儲存資料,0表示

正,1表示負;

無符號:只能夠表示非負的,最高位參與儲存有效資料;

char為例:

signed char:

最大的:正的!==》0111 1111 = 127

最小的:負的!==》1111 1111 = -127

存在的問題:0000 0000 = +0 和 1000 0000 = -0

印度:-128;

[-128,127]

unsigned char:

最大的:1111 1111

最小的:0000 0000

原碼、反碼和補碼:

資料在計算機裡面儲存的時候,都是以補碼的方式儲存的!

正數:原碼反碼補碼都是一樣的;

負數:負數的補碼是負數的絕對值按位取反再加一;

-1的補碼計算:

-1的絕對值:0000 0001==》1111 1110==》11111111

運算子:

+、-、*、/、%、i++、++i

i++:先使用再加一;

++i:先加一再使用;

scanf("控制格式",位址);

scanf("%d",*&a);

scanf("%d",&a[0]);

csdn第三節課

筆記部分 1.網頁中影象的插入 一.屬性 1 alt 當無法顯示是給以使用者提示 2 title 滑鼠移動到上時顯示資訊 3 src 用於 中找出的路徑.二.路徑 1 當前的目錄檔案 直接寫出檔名 或 檔名 2 子集目錄檔案 同級檔名 子集檔名 3 上級檔案 檔名 多一級多加乙個 2.超連結 一.兩...

第三節課上筆記

沒有彈出輸入賬戶框,顯示如下,先輸入使用者名稱,碼雲的註冊手機號或者郵箱,回車,輸入碼雲註冊密碼 如果輸入錯誤,按如下操作 git add 2.git commit m 檔名稱 3.git push u origin master git add 當前資料夾所有內容 git commit m 備註資...

php第三節課

正規表示式 正規表示式 斜槓代表定界符 str abcde123fg456h reg d echo preg replace reg,str 將字串 str按照職責表示式reg替換為 var dump preg split reg,str 將字串str按照正規表示式拆分 arr array preg...