C語言學習 第十一次作業總結

2022-05-05 19:27:08 字數 4060 閱讀 3586

兩次的作業,都是和指標有關。從第一次的作業開始,我就多次讓同學們思考這個問題:為什麼要用指標,為什麼在函式的形參中要使用指標。如果能夠想明白這2個問題,那麼同學們應該會指標的了解就差不多足夠了,剩下的,就是充分的**練習。

其實,總的來說,指標這一概念本身很簡單,理解起來也並不複雜——指標是乙個變數,內部儲存的是乙個位址,這個位址指向其他的變數/函式(也有可能是空)。

用c語言來表述,就是先宣告乙個指標,在定義它:

// 以 int 型別為例

int *point; // 宣告乙個變數,這個變數是乙個指標變數

int a;

point = &a; // 定義這個point指向變數a。

int b;

point = &b; // 將 point 指向 b

*point = 5; // 將 b 的值賦值為 5

但是,這裡有乙個地方特別容易讓新手混淆:

int *pointa = &a;	// ① 在這種宣告的同時定義的,有 * 號

int b;

int *pointb;

pointb = &b; // ② 在定義的時候,假如想要讓指標指向乙個目標,是不需要 * 號的

*pointa = b; // ③ 當需要對這個指標變數進行解引用,就需要乙個 * 號(解引用符號)

雖然僅僅是很簡單的幾句**,但是在經驗不足的情況下,非常容易混淆,同學們需要在這裡多多鍛鍊。

這裡,僅列舉幾個同學們經常遇到的錯誤示例:

void findmax(int x,int y,int *pmax)

// 呼叫

int main()

在以上的**中,同學們出現了以下的錯誤:

int main()

void sum_diff(float op1,float op2,float *psum,float *pdiff)

這個關於指標的錯誤使用的例子,大家可以自己看看都有哪些錯誤。

首先,我們來看這樣的乙個函式:

void swap(int *numa,int *numb);
這個函式的目標是:對於傳入的兩個數,對他們進行交換。根據之前學習到的知識,想要交換兩個數,是很容易實現的:

int temp;

temp = numb;

numb = numa;

numa = temp;

現在,開始討論這個函式,思考為什麼需要傳入指標的一種情況:

// 現在假設函式的原型是

void swap(int numa,int numb);

首先,需要大家有這樣的乙個意識:函式傳參,傳遞的都是乙個數值。這個概念的理解請不要偏頗,這裡的數值的含義較為狹窄:就是乙個數。(這句話是不是要單獨開乙個博文寫寫呢?)

比如,對於swap函式,如果是下面的方式進行呼叫:

int a = 3,b = 5;

swap(a,b); // swap(3,5);

在這裡,對函式傳入引數ab,和後面的注釋中那樣傳遞入3和5是沒有本質的差別的。而根據前面的學習,大家可以知道,字面常量是無法儲存資料的,所以函式中的交換操作自然無法達成。

而對於swap函式的形參是指標的情況,因為傳入的是位址這個「常量」,最終在函式內部需要利用解引用符號找到對應的記憶體空間,所以能夠實現資料的交換。

之前大家簡單的學習了結構體的相關知識。在寫**的時候,結構體中的變數可能並不多,但是大家考慮乙個有100個變數的結構體,是不是意味著需要將這100個變數的值都賦值給函式呢。如此,記憶體開銷勢必增加。所以對於這樣的情況,也會傳遞給函式結構體的指標。之所以結構體能夠傳遞指標,是因為結構體有乙個性質和陣列十分類似:它在記憶體中也是連續儲存的(嚴格來說結構體本身是可能存在空隙的,但是總的來說它還是連續的)。

編號學號

cnblogs暱稱

**總結

抄襲行數

加權得分備註1

160809401

付胤70

7052

38.8

**有一題沒有做

2160809402

張博洋000

0完全看不懂寫了些什麼

3160809403

董宇豪85

5023

57.2

最後乙個**沒有寫成乙個函式

4160809404

朱念齊-100

-100

0-100

5160809405

蘆彥儒-100

-100

0-100

6160809406

------

------

------

------

------

------

7160809407

leonardo#*

-100

-100

0-100

8160809408

il.linker

5080

3441.6

第三題沒有寫,第二題**有誤

9160809409

gdcs16_409

8590

8237.8

10160809410

無聲的夢

9090090

11160809411

劉悅-100

-100

0-100

12160809412

張磊-100800

-2813

160809413

王洪燁90

6589

26.6

作業明顯沒有之前認真

14160809414

紀柏如70

8020

6215

160809415

閆墨傑-100

-100

0-100

16160809416

史航70

9049

48.6

17160809417

狂歡-100

-100

0-100

18160809418

水母jam

8575

9225.8

**稍有錯誤

19160809419

朱鈺鋮-100

-100

0-100

20160809420

虞小生70

8521

63.4

21160809421

飲冰少年1

9060

3954.6

22160809422

-----------

------

------

------

------

------

23160809423

李筱-100

-100

0-100

24160809424

xzy!

7060

4638.4

25160809425

剎那神華

-100500

-40沒有找到**

26160809426

zlt.santorini'ly

8585

9229.8

27160809427

江超民85

6583

27.2

28160809428

zxkai

8560

8325.2

勇於承認抄襲「第三題實在不會 複製了同學的」

29160809429

王鑫沐75

8580

3130

160809430

茉妍75

7080

2531

160809431

茉莉雨85900

87

C語言第十一次作業

問題 答案這個作業屬於那個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 語言的認識和了解,程式設計的基本操作,通過自己的實踐讓自己掌握好自己的專業 這個作業在那個具體方面幫助我實現目標 新 的編譯,函式和變數 參考文獻 pta系統常見問題解答 變數變數 變數型別 b,i,n,m 輸...

c語言第十一次作業

一 實驗目的 1 熟練掌握結構體的使用方法。2 掌握通訊錄排序的程式編寫。3 掌握按等級統計學生成績的程式編寫。1 實驗要求 建立乙個通訊錄,通訊錄的結構體記錄包括 姓名 生日 號碼 其中生日又包括三項 年 月 日。編寫程式,定義乙個巢狀的結構型別,輸入n n 10 個聯絡人的資訊,再按他們的年齡大...

第十一次作業總結

一.知識點 指標陣列,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標,即指向陣列的指標 1.指標陣列和陣列指標的區別 如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向含4個元素的一維陣列。p a 將該二維陣列的首位址賦給p,也就是a 0...