簡單的案例2.0
一般來說,在c語言中乙個函式頂多只能返回乙個值,那麼我們如何設計能巧妙的返回多個我們需要的值呢?
先來看簡單的題,我們有乙個長度為10的int型陣列
int arr=
;
現在我們需要寫乙個函式,找出此陣列中最大值和最小值。
滑稽.jpg(若是不用寫函式,直接通過for遍歷我們直接就能遍歷到最大值和最小值)
但可惡的是必須用函式來解決,此時函式中只能返回乙個值,那我們是不是非得寫兩個函式?
我們完全可以通過指標的特性,從函式中取得多個我們需要的「值」
我們在main函式中 定義我們需要用到的指標
int
*pmax,
*pmin;
接下來 來寫我們的功能函式
void
find_max_and_min
(int
**pmax,
int*
*pmin,
int arr)
if(**pmin > arr[i])}
}
此時我們注意到,功能函式中傳入的引數分布為兩個指向指標的指標,以及我們需要查詢的陣列。
主函式中
int
*pmax,
*pmin;
find_max_and_min
(&pmax,
&pmin,arr)
;printf
("%d,%d"
,*pmax,
*pmin)
;
完整**:
#include
#include
void
find_max_and_min
(int
**pmax,
int*
*pmin,
int arr)
if(**pmin > arr[i])}
}int
main()
;int
*pmax,
*pmin;
find_max_and_min
(&pmax,
&pmin,arr)
;printf
("%d,%d"
,*pmax,
*pmin)
;return0;
}
typedef
struct lnode lnode,
*linklist;
這是之前上資料結構課的鍊錶**,從老師的**中不難發現分別定義了lnode和 *linklist
當時心想: 「已經定義了 lnode,要用到結構體指標的時候 直接*lnode就好了,為啥還要定義個 *linklist 呢 」 後來逐漸恍然大悟~
凡事先看主函式
int
main()
這裡的linklist head;
相當於lnode * head;
敲重點敲重點,createlist(&head);
嗯哼 此時並沒有任何返回的指標,是在head頭基礎上進行操作的。
並且,在createlist函式中是對 頭指標(head) 進行 取位址(&head),和我們上面的 &pmax,&pmin妙處相同。(沒理解的同學認真想想)
void
createlist
(linklist *head)
tem->next =
*head;
}
這裡的linklist *head
等價於lnode **head
終於理解了老師**用心之處~~
傳值和傳指標,其實都是傳值。你需要傳的是指向指標的位址,並通過函式對這個位址中的內容進行操作
另外再給學資料結構的同學兩種使用結構體進行操作的寫法
寫法一:直接通過函式返回指標:
linklist init
(linklist l)
intmain()
void
init
(linklist *l)
intmain()
重在理解。 C語言main函式引數 返回值
c語言main函式返回值 main函式的返回值,用於說明程式的退出狀態。如果返回0,則代表程式正常退出 返回其他數字的含義則由系統決定,通常,返回非零代表程式異常退出,即使程式執行結果正確也仍需修復 c語言main函式寫法 void main 是錯誤的,c c 中從來沒有定義過main。c 之父 b...
引數 返回值
1.函式 函式是對功能的封裝 語法 def 函式名 形參列表 函式體 塊,return 呼叫 函式名 實參列表 2.返回值 return 在函式執行的時候.如果遇到return.直接返回 1.如果函式什麼都不寫,不寫return,沒有返回值.得到的是none 2.在函式中間或者末尾寫return,返...
C語言 void不能返回值,指標來返回
題目 請編寫函式void fun int x,int pp,int n 它的功能是 求出能整除x且不是偶數的各整數,並按從小到大的順序放在pp所指的陣列中,這些除數的個數通過形參n返回。例如 若x中的值為30,則有4個數符合要求,它們是1 3 5 15。注意 請勿改動主函式main和其他函式中的任何...