在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數組/指針的傳參問題

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2022-08-17 10:37 ? 次閱讀

朋友們,到站啦!指針進階第四站:傳參問題

0.引例

自定義函數里形參的類型,要和函數調用中傳過去的實參類型相對應

test函數里的是int類型,我們傳過去的參數a也是int類型

void test(int n){}int main(){    int a=1    test(a);    return 0;}

好了,現在你已經知道了函數傳參的基本概念了吧!

那么就來分析一下數組傳參、指針傳參的代碼吧!

1、一維數組傳參

看看以下函數的代碼示例

你覺得誰是正確的,誰是錯誤的呢?

include void test(int arr[]){}void test(int arr[10]){}void test(int *arr){}void test2(int *arr[20]){}void test2(int **arr){}int main(){    int arr[10] = {0};    int *arr2[20] = {0};    test(arr);    test2(arr2);    return 0;}

NO.1 形參使用數組的形式來接收,正確

NO.2 同樣是數組的形式,正確

需要注意的是,數組傳參并不會開辟一個新的數組

所以函數[ ]里的數字是多少并不影響

NO.3 數組名是首元素的地址,用指針接收,正確

NO.4 arr2是一個指針數組,(int *arr[20])和原數組對應,正確

NO.5 數組名是首元素地址,arr2的首元素是一個int*類型

可以用二級指針來接收,正確!

860bcc2e-1d3a-11ed-ba43-dac502259ad0.png

2、二維數組傳參

了解完一維數組了,那就來看看二維數組

以下的函數傳參,哪些是對的,哪些是錯的呢?

void test(int arr[3][5])//一一對應,正確!{}void test(int arr[][])//省略列,錯誤!{}void test(int arr[][5])//可以省略行,正確!{}void test(int *arr)//二維數組的首元素是第一行{}//第一行是int(*)[5]類型,錯誤!void test(int* arr[5])//指針數組,錯誤!{}void test(int (*arr)[5])//數組指針,正確!{}void test(int **arr)//arr不是一級指針的地址,錯誤!{}
int main(){    int arr[3][5] = {0};    test(arr);    return 0;}

根據二維數組傳參的代碼,復習以下知識點

(1)二維數組的首元素是第一行

(2)二維數組在定義的時候可以省略行,不能省略列

第一行的類型是int[5],應該放進數組指針里!

3、一級指針傳參

#include void print(int *p, int sz)//用int*來接受{ int i = 0; for(i=0; i { printf("%d
", *(p+i)); }}int main(){ int arr[10] = {1,2,3,4,5,6,7,8,9}; int *p = arr; int sz = sizeof(arr)/sizeof(arr[0]);  print(p, sz);//一級指針p,傳給函數 return 0;}

4、二級指針傳參

以下是二級指針傳參的基本形式

pp是int**類型,而&p是指針變量的地址,要用二級指針來接收

#include void test(int** ptr){  printf("num = %d
", **ptr); }int main(){  int n = 10;  int*p = &n;  int **pp = &p;  test(pp);  test(&p);  return 0;}

再來看如下代碼

&p、pp、arr這三個參數的類型都是二級指針

test函數里面要用char**來接收

void test(char** p){}
int main(){  char ch = 'w';  char* p = &ch;  char** pp = &p;  char* arr[5];
  test(&p);  test(pp);  test(arr);    return 0;}

arr是指針數組的數組名,數組名是數組首元素的地址

數組的首元素是char*類型,所以要用二級指針來接收

5、如何判斷參數類型

如果我們在寫代碼的時候,不缺定應該用什么類型來接收的時候

可以寫一個測試代碼,VS編譯器會報錯“類型不一致”

864c6108-1d3a-11ed-ba43-dac502259ad0.png

結語

傳參問題并不算非常難,但我們仍要熟練掌握

這樣才能避免在寫自定義函數的時候出現參數類型不同的bug!

第四站數組傳參到這里就結束啦!

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 指針
    +關注

    關注

    1

    文章

    481

    瀏覽量

    70593
  • 代碼
    +關注

    關注

    30

    文章

    4820

    瀏覽量

    68882
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    25999

原文標題:【C語言】指針進階第四站:數組/指針的傳參問題!

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言中指針數組數組指針的區別

    指針數組之間存在著緊密的關系。在本文中,我們將探討指針數組的關系、指針算術和數組遍歷、多維
    發表于 08-17 15:29 ?425次閱讀

    數組指針的詳細講解

    數組指針的詳細講解
    發表于 10-16 08:44 ?0次下載

    指針數組的詳細資料和實例程序免費下載

    指針變量來訪問數組中任一元素,通常將數組的首地址稱為數組指針,而將指向數組元素的
    發表于 11-05 17:07 ?4次下載
    <b class='flag-5'>指針</b>與<b class='flag-5'>數組</b>的詳細資料和實例程序免費下載

    詳談數組指針的區別與聯系

    詳談數組指針的區別與聯系
    的頭像 發表于 06-29 15:18 ?2.2w次閱讀
    詳談<b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>的區別與聯系

    指針數組數組指針的區別

    這里我們區分兩個重要的概念:指針數組數組指針
    的頭像 發表于 06-29 15:30 ?2w次閱讀
    <b class='flag-5'>指針</b><b class='flag-5'>數組</b>和<b class='flag-5'>數組</b><b class='flag-5'>指針</b>的區別

    圖文詳解:數組指針

    數組時,會退化為指針,所以我們先來看看什么是退化!
    的頭像 發表于 06-29 15:34 ?5446次閱讀
    圖文詳解:<b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>的<b class='flag-5'>傳</b><b class='flag-5'>參</b>

    理解函數指針、函數指針數組、函數指針數組指針

    理解函數指針、函數指針數組、函數指針數組指針
    的頭像 發表于 06-29 15:38 ?1.5w次閱讀
    理解函數<b class='flag-5'>指針</b>、函數<b class='flag-5'>指針</b><b class='flag-5'>數組</b>、函數<b class='flag-5'>指針</b><b class='flag-5'>數組</b>的<b class='flag-5'>指針</b>

    C語言總結_數組與函數練習題

    字符串標準處理函數介紹(string.h)、指針數組當做函數形指針定義、函數返回指針、void類型定義
    的頭像 發表于 08-14 09:36 ?853次閱讀

    二維數組數組指針以及指針數組

    二維數組數組指針以及指針數組
    的頭像 發表于 08-16 09:02 ?2712次閱讀

    【C語言進階】“數組指針”和“指針數組”都是啥跟啥?

    【C語言進階】“數組指針”和“指針數組”都是啥跟啥?
    的頭像 發表于 08-31 13:21 ?1941次閱讀

    C語言數組元素的指針

    C語言調用函數時虛實結合的方法都是采用“值傳遞”方式,當用變量名作為函數參數時傳遞的是變量的值,當用數組名作為函數參數時。 由于數組名代表的是數組元素地址,因此傳遞的值是地址,所以要去形
    的頭像 發表于 03-10 14:45 ?964次閱讀

    C語言中什么是指針數組

    在C語言中一個數組,若其元素均為指針類型數據,稱為指針數組,也就是說,指針數組中的每一個元素都存
    的頭像 發表于 03-10 15:26 ?1844次閱讀

    數組指針不能混用的情況

    數組指針不能混用的情況? 數組指針是 C/C++ 中非常常見的特性和概念。然而,在某些情況下,數組
    的頭像 發表于 12-07 13:46 ?637次閱讀

    數組指針不相同嗎?數組指針有哪些區別

    數組就是指針指針就是數組,這樣的言論在評論區看到不下于10次。
    的頭像 發表于 12-13 16:34 ?1639次閱讀
    <b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>不相同嗎?<b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>有哪些區別

    面試常考+1:函數指針指針函數、數組指針指針數組

    在嵌入式開發領域,函數指針指針函數、數組指針指針數組是一些非常重要但又容易混淆的概念。理解它
    的頭像 發表于 08-10 08:11 ?974次閱讀
    面試常考+1:函數<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數、<b class='flag-5'>數組</b><b class='flag-5'>指針</b>與<b class='flag-5'>指針</b><b class='flag-5'>數組</b>
    主站蜘蛛池模板: 夜操| 人人看人人做| 就去色综合| 久久久噜噜噜久久久午夜| 毛片大全免费| 国产欧美高清| 亚洲天天| 理论视频在线观看| tom影院亚洲国产| 中文字幕一区在线观看| 色吧色吧色吧网| 一级aaaaaa片毛片在线播放| 婷婷开心激情网| 欧美精品一区在线看| 黄 色 录像成 人播放免费| 国产高清色播视频免费看| 永久在线| 美女和美女| 成人啪啪免费视频| 99热久久精品免费精品| 偷偷久久| 久久手机免费视频| 在线免费看片| 国内精品久久久久影院免费| 黄色男人的天堂| 中文久草| 欧美午夜小视频| 成年人网站在线| 奇米网在线观看| 一区二区不卡视频| 亚偷熟乱区视频在线观看| 欧美ab在线| 97色婷婷成人综合在线观看| 免费性bbbb台湾| 27pao强力打造高清免费高| 在线观看亚洲成人| 欧美视频综合| 夜夜爱夜夜做| 色涩在线| 亚洲成综合人影院在院播放| 免费一看一级毛片|