最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中如何通過指針參數(shù)返回值

 更新時間:2023年02月24日 10:04:30   作者:ISMidi  
這篇文章主要介紹了C語言中如何通過指針參數(shù)返回值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

簡單的案例

深夜無聊而引發(fā)的問題

一般來說,在C語言中一個函數(shù)頂多只能返回一個值,那么我們?nèi)绾卧O(shè)計能巧妙的返回多個我們需要的值呢?

先來看簡單的題,我們有一個長度為10的int型數(shù)組

int arr[] = {1,8,10,2,-5,0,7,15,4,-5};

現(xiàn)在我們需要寫一個函數(shù),找出此數(shù)組中最大值和最小值。

滑稽.jpg(若是不用寫函數(shù),直接通過for遍歷我們直接就能遍歷到最大值和最小值)

但可惡的是必須用函數(shù)來解決,此時函數(shù)中只能返回一個值,那我們是不是非得寫兩個函數(shù)?

我們完全可以通過指針的特性,從函數(shù)中取得多個我們需要的“值”

回歸正題

我們在main函數(shù)中 定義我們需要用到的指針

int *pmax,*pmin;

接下來 來寫我們的功能函數(shù)

void find_max_and_min(int **pmax,int **pmin, int arr[]) {
?? ?*pmax = *pmin = arr;

?? ?int i;
?? ?
?? ?for(i=0;i<10;i++) {
?? ??? ?if(**pmax < arr[i]) {
?? ??? ??? ?*pmax = arr+i;
?? ??? ?}
?? ??? ?if(**pmin > arr[i]) {
?? ??? ??? ?*pmin = arr+i;
?? ??? ?}
?? ?}

}

此時我們注意到,功能函數(shù)中傳入的參數(shù)分布為兩個指向指針的指針,以及我們需要查找的數(shù)組。

主函數(shù)中

int *pmax,*pmin;
find_max_and_min(&pmax,&pmin,arr);?
printf("%d,%d",*pmax,*pmin);

即可在arr中找出我們需要的“返回值”

敲重點,敲重點:我們將 指針 pmax和pmin的地址 傳給了函數(shù)find_max_and_min。

完整代碼:

#include<stdio.h>
#include<stdlib.h>
void find_max_and_min(int **pmax,int **pmin, int arr[])?
{
?? ?*pmax = *pmin = arr;
?? ?int i=0;
?? ?for (i;i<10;i++)?
?? ?{
?? ??? ?if(**pmax < arr[i])?
?? ??? ?{
?? ??? ??? ?*pmax = arr+i;
?? ??? ?}
?? ??? ?if(**pmin > arr[i])?
?? ??? ?{
?? ??? ??? ?*pmin = arr+i;
?? ??? ?}
?? ?}
}
int main()?
{
?? ?int arr[] = {1,8,10,2,-5,0,7,15,4,-5};
?? ?int *pmax,*pmin;
?? ?find_max_and_min(&pmax,&pmin,arr);
?? ?printf("%d,%d",*pmax,*pmin);
?? ?return 0;
}

簡單的案例2.0

鏈表中"迷人"的指針

typedef struct LNode {
? ? Elemtype data;
? ? struct LNode *next;
}LNode,*LinkList;

這是之前上數(shù)據(jù)結(jié)構(gòu)課的鏈表代碼,從老師的代碼中不難發(fā)現(xiàn)分別定義了LNode和 *LinkList

當時心想: “已經(jīng)定義了 LNode,要用到結(jié)構(gòu)體指針的時候 直接*LNode就好了,為啥還要定義個 *LinkList 呢 ” 后來逐漸恍然大悟~

凡事先看主函數(shù)

int main()
{
? ? LinkList head; ? ? //head 頭指針?


? ? createlist(&head);
? ? initlist(head);
? ? findrabbit(head);
? ? printf("\n");?
? ? outputlist(head);
? ? return 0;
}

這里的 LinkList head; 相當于 LNode * head;

敲重點敲重點,createlist(&head);

嗯哼 此時并沒有任何返回的指針,是在head頭基礎(chǔ)上進行操作的。

并且,在createlist函數(shù)中是對 頭指針(head) 進行 取地址(&head),和我們上面的 &pmax,&pmin妙處相同。(沒理解的同學認真想想)

void createlist(LinkList *head)
{
? ? int i;
? ? *head=(LinkList)malloc(sizeof(LNode));
? ??
? ? (*head)->data = 0;
? ? LinkList p,tem;
? ? tem = *head;
?? ?
//?? ?頭插法 循環(huán)單鏈表 ?
? ? for(i=0;i<NUMS;i++)
? ? {
? ? ? ? p=(LinkList)malloc(sizeof(LNode));
? ? ? ? tem->next = p;
? ? ? ? tem = p;
? ? ? ??
// ? ? ? ?(*head)->data++; ? //計數(shù)用?
? ? }

?? ?tem->next = *head;

}

這里的LinkList *head 等價于 LNode **head

終于理解了老師代碼用心之處~~

再度分析

傳值和傳指針,其實都是傳值。 你需要傳的是指向指針的地址,并通過函數(shù)對這個地址中的內(nèi)容進行操作

指針本身也是一個變量類型,無論變量如何,都應(yīng)該使用地址傳參,使用取地址符:&

另外再給學數(shù)據(jù)結(jié)構(gòu)的同學兩種使用結(jié)構(gòu)體進行操作的寫法

寫法一:直接通過函數(shù)返回指針:

LinkList init(LinkList L) {
?? ?L = (LinkList)malloc(sizeof(LNode));
?? ?...
?? ?return L
}

int main() {
?? ?LinkList L;
?? ?L = init(L);
}

寫法二:向函數(shù)傳遞指針變量的地址,通過函數(shù)修改其指向的內(nèi)容

void init(LinkList *L) {
?? ?*L = (LinkList)malloc(sizeof(LNode));
?? ?...
}

int main() {
?? ?LinkList L;
?? ?init(&L);
}

重在理解。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡單總結(jié)C++中的修飾符類型

    簡單總結(jié)C++中的修飾符類型

    這篇文章主要介紹了C++中的修飾符類型總結(jié),是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-05-05
  • C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

    C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

    這篇文章主要介紹了C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向,整個Cartographer源碼閱讀是很枯燥的, 但絕對是可以學到東西的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • C/C++獲取Windows平臺CPU占用率的方法

    C/C++獲取Windows平臺CPU占用率的方法

    最近在做系統(tǒng)信息相關(guān)的接口,為了實現(xiàn)跨平臺,故在linux和Windows平臺獲取占用率信息,文章主要介紹Windows下的方法,文中給出了參考代碼,需要的朋友可以參考下
    2023-12-12
  • 淺析VC++中的頭文件包含問題

    淺析VC++中的頭文件包含問題

    類中盡量采用指針或引用方式調(diào)用其它類,這樣就可以只聲明class xxx了。并且這也符合資源最優(yōu)利用,更利于使用多態(tài)
    2013-09-09
  • OpenCV提取圖像中圓線上的數(shù)據(jù)具體流程

    OpenCV提取圖像中圓線上的數(shù)據(jù)具體流程

    在對圖像進行處理時,經(jīng)常會要提取出圖像中某條直線、圓線或者ROI區(qū)域內(nèi)的感興趣數(shù)據(jù),進行重點關(guān)注。本文主要介紹了利用OpenCV獲取圖像中圓線上的數(shù)據(jù),需要的可以參考一下
    2021-11-11
  • 詳解CLion配置openMP的方法

    詳解CLion配置openMP的方法

    這篇文章主要介紹了CLion配置openMP的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • QT+OpenGL實現(xiàn)簡單圖形的繪制

    QT+OpenGL實現(xiàn)簡單圖形的繪制

    這篇文章主要為大家詳細介紹了如何利用QT和OpenGL實現(xiàn)簡單圖形的繪制,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-12-12
  • C/C++實現(xiàn)控制臺輸出不同顏色字體的方法

    C/C++實現(xiàn)控制臺輸出不同顏色字體的方法

    這篇文章主要介紹了C/C++實現(xiàn)控制臺輸出不同顏色字體的方法,涉及C++控制臺文字屬性相關(guān)設(shè)置操作技巧,需要的朋友可以參考下
    2017-09-09
  • 基于C語言實現(xiàn)學生成績管理系統(tǒng)

    基于C語言實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要介紹了基于C語言實現(xiàn)學生成績管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C/C++ 避免數(shù)組越界的方法

    C/C++ 避免數(shù)組越界的方法

    這篇文章主要介紹了C/C++ 避免數(shù)組越界的方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06

最新評論

浠水县| 溧水县| 阿鲁科尔沁旗| 江城| 汉川市| 平邑县| 绥宁县| 驻马店市| 安康市| 轮台县| 安宁市| 炎陵县| 烟台市| 四平市| 酒泉市| 沐川县| 贵溪市| 策勒县| 义马市| 台湾省| 兴业县| 珠海市| 鹿泉市| 叶城县| 嘉禾县| 嵊州市| 吴桥县| 广水市| 新巴尔虎右旗| 丰原市| 青阳县| 新宾| 饶河县| 蒲城县| 河曲县| 宁化县| 赤水市| 黄龙县| 晋城| 新野县| 威远县|