程式設計 指標、陣列重點整理

1.為什麼要用指標在副程式中做切換,其缺點為何?

指標可以用來是儲存變數的記憶體位址,當我們使用模組化的程式時,因為副程式回傳值一次只能回傳一個值,但如果此時剛好需要回傳二個值以上時,可以先傳入指標,這樣副程式就可以將需要回傳的值經由指標得知對應變數的位址,而可直接將運算過的值覆寫到該變數的內容中
缺點:因為副程式可以得知變數的位址,因此如有多個副程式會同時覆寫到同一變數的內容時而造成程式執行後之結果不如預期,使得查錯、維護的工作變得困難

pointer的延申題型,可能是出一段程式,問你程式哪邊錯誤,或是問其印出之結果為何
如10-1(P.441)、P.436(因為老師在課堂上有計算)、P.450

另外~要注意的是~pointer只能為NULL、常數0或是記憶體位址或是指標變數的值(指標變數的值也是記憶體位址)

2.什麼是array,何時要使用它?使用array有節省記憶體空間嗎?

array(陣列)是一個大小固定的連續儲存位置的集合。陣列中的每個儲存位置都是通過一個稱為索引(index)的相關地址來存取,當有一連串同一型別的資料時,就可使用
使用array並沒有節省記憶體空間

array的延申題型,可能是出一段程式,要你回答印出的結果為何

如:
int m[3]={1,3,5};
int *a;
a=m;
printf(“%d\n",*a);
printf(“%d\n",*(a+1));

答案為
1
3

或者是
int i,m[3]={1,3,5};
int *a;
a=m;
for(i=0;i<3;i++){
printf(“%d\n",*(a+i));
}

答案為
1
3
5

另外和array有關的程式則要看11-1(P.482)及11-2(P.513)

特別要注意的是因為array也是指標的一種,因此當指標要獲得array的第一個記憶體位址時,不需要使用&,就像上面的例題那樣,a=m(或是寫成a=&m[0])而不是寫成a=&m

3.排序(sort)

(1)氣泡排序法
(2)選擇排序法
(3)插入排序法
這邊的考題很可能是像上學期的運算符號那樣~要你寫出一組數列以XX排序法如何由小排至大(或大排至小)的過程

氣泡排序法可看課本P.493
選擇排序法可看課本P.496下方
插入排序法可看課本P.498下方

4.陣列搜尋

(1)順序搜尋法(因為此法是一個一個詢序去比對~所以不一定要排序過)
(2)二元搜尋法(此搜尋法陣列一定要先排序過後才能做搜尋)

這邊我就不知道他會怎麼出了…
順序搜尋法可看課本P.502
二元搜尋法可看課本P.506下方

5.為什麼要使用動態變數,試述其優點為何

動態變數可以在程式執行需要時,由作業系統配置其記憶體空間,使用完畢或不需要時,就會將其記憶體空間釋放出來,讓我們可以更有效率的使用記憶體,不會造成記憶體空間的浪費

語法(例)
int *ptr;
ptr=malloc(sizeof(int)); <==留二個byte回傳啟始位置給ptr這個指標變數
free(ptr); <==釋放時使用free()
int *arr;
arr=malloc(array_size*sizeof(int)); <==array_size是事先宣告過的常數,這樣系統就會配置符合那個長度的記憶體給這個array使用
free(arr);

6.如何自定程式庫的4個步驟

Step1:找出重覆使用的模組,將這些副程式(模組)放入自己命名的程式設計師定義程式庫中
Step2:程式設計師定義程式庫一樣包含有一些標頭檔及一些實作檔案,儲存在預設的目錄中

標頭檔內只含有宣告(函數,總體變數,命名常數,typedefs,和程式設計師自定義資料類型),而實作檔中只含有我們想加入程式庫中的函數(副程式)實作

Step3:製作一實作檔案,可以是任何名稱,一般會使用程式庫名稱做為檔案名,副檔名則為c (也就是xxx.c)

包含以下三個內容
(1)前端處理指引#include加上程式設計師定義程式庫的標頭檔名,此時之標頭檔名需以對稱雙引包住,如#include “calendar.h"
(2)必須使用#include來包含有所有的標準程式庫如#include <stdio.h>
(3)函數(副程式)的定義

Step4:製作一應用檔案,它必須含有一個函數main及其他在實作檔案中沒有的函數,並含有以下的內容

(1)前端處理指引#include加上程式設計師定義程式庫的標頭檔名,此時之標頭檔名需以對稱雙引包住,如#include “calendar.h"
(2)必須使用#include來包含有所有的標準程式庫如#include <stdio.h>
(3)特定函數(副程式)的定義

Step5:開啟一個新的專案,將應用檔案及實作檔案插入

Tagged , . Bookmark the permalink.

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *