C語言通過指標引數返回值

2021-10-12 04:46:10 字數 2305 閱讀 8323

簡單的案例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和其他函式中的任何...