中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

廣州市網(wǎng)站建設(shè) 駿域動(dòng)力北京已感染上千萬人

廣州市網(wǎng)站建設(shè) 駿域動(dòng)力,北京已感染上千萬人,百度這個(gè)網(wǎng)站怎么做,湖南建設(shè)監(jiān)理協(xié)會(huì)網(wǎng)站目錄數(shù)組傳參一維數(shù)組傳參二維數(shù)組傳參指針傳參一級(jí)指針傳參二級(jí)指針傳參我們?cè)趯懘a的時(shí)候難免要把數(shù)組或者指針傳給函數(shù)&#xff0c;那函數(shù)的參數(shù)該如何設(shè)計(jì)呢&#xff1f; 數(shù)組傳參 一維數(shù)組傳參 我們首先來看下面代碼的幾個(gè)例子&#xff1a; #include <stdio.h>…

目錄

  • 數(shù)組傳參
      • 一維數(shù)組傳參
      • 二維數(shù)組傳參
  • 指針傳參
      • 一級(jí)指針傳參
      • 二級(jí)指針傳參

我們?cè)趯懘a的時(shí)候難免要把數(shù)組或者指針傳給函數(shù),那函數(shù)的參數(shù)該如何設(shè)計(jì)呢?

數(shù)組傳參

一維數(shù)組傳參

我們首先來看下面代碼的幾個(gè)例子:

#include <stdio.h>
void test(int arr[])//ok?--Yes
{}
void test(int arr[10])//ok?--Yes
{}
void test(int* arr)//ok?--Yes
{}
void test2(int* arr[20])//ok?--Yes
{}
void test2(int** arr)//ok?--Yes
{}
int main()
{int arr[10] = {0};int* arr2[20] = {0};test(arr);test2(arr2);

🚩首先來看test(arr);
看看它的函數(shù)參數(shù)可以怎么寫?

因?yàn)?code>test(arr);傳過去的是數(shù)組,所以上面的void test( ){}也可以用數(shù)組接收,
即寫成void test(int arr[]){}
當(dāng)然[]里可以寫數(shù)組大小,也可以不寫,里面的數(shù)字對(duì)語法沒任何影響,所以我們還可以寫做void test(int arr[10]){}void test(int arr[30]){}(當(dāng)然這樣寫30,雖然語法正確,但沒任何意義)
上面的寫法即是數(shù)組傳參,形參寫成數(shù)組的形式。

我們知道,數(shù)組傳參本質(zhì)上傳過去的是數(shù)組首元素的地址,所以參數(shù)部分我們就可以寫成指針了
我們來分析一下
test(arr);數(shù)組名arr是首元素的地址, int arr[10] = {0};可以看出每個(gè)元素的類型是int類型。
test(arr);傳過去的是首元素的地址,首元素的地址是一個(gè)int類型的元素的地址,int類型元素的地址如果要用指針來接收,那就該用int類型指針來接收,所以可以寫成void test(int* arr){}

🚩接下來我們來看 test2(arr2);
數(shù)組傳過來,用數(shù)組接收,寫做void test2(int* arr[20]){}以及void test2(int* arr[]){},原理同上面的test(arr);
那數(shù)組傳參寫成指針又怎么寫呢?
數(shù)組傳參本質(zhì)上傳過去的是數(shù)組首元素的地址, int* arr2[20] = {0};可以看出,首元素類型為int*,即每個(gè)元素都是個(gè)整型指針,所以int*類型元素的地址如果要用指針來接收,那就該用int*類型指針來接收,即一級(jí)指針地址傳過去,就需要用二級(jí)指針來接收,所以可以寫成void test(int** arr){}

二維數(shù)組傳參

同樣,我們首先來看下面代碼的幾個(gè)例子:

void test(int arr[3][5])//ok?--Yes
{}
void test(int arr[][])//ok?--No
{}
void test(int arr[][5])//ok?--Yes
{}
//總結(jié):二維數(shù)組傳參,函數(shù)形參的設(shè)計(jì)只能省略第一個(gè)[]的數(shù)字。
//因?yàn)閷?duì)一個(gè)二維數(shù)組,可以不知道有多少行,但是必須知道一行多少元素。
//這樣才方便運(yùn)算。
void test(int* arr)//ok?--No
{}
void test(int* arr[5])//ok?--No//int* arr[5]是指針數(shù)組 根本不沾邊
{}
void test(int (*arr)[5])//ok?--Yes
{}
void test(int** arr)//ok?--No
{}
int main()
{int arr[3][5] = {0};test(arr);
}

有前面的分析,很容易知道可以這樣寫void test(int arr[3][5]){}
二維數(shù)組傳參,函數(shù)形參的設(shè)計(jì)只能省略第一個(gè)[]的數(shù)字,即行可以省略,列不能省略。
因?yàn)閷?duì)一個(gè)二維數(shù)組,可以不知道有多少行,但是必須知道一行多少元素。
這樣才方便運(yùn)算。
所以void test(int arr[][]){}這樣寫不行,
應(yīng)該void test(int arr[][5]){}這樣寫。
我們要知道,當(dāng)我們談二維數(shù)組首元素地址的時(shí)候,指的是它的第一行
在這里插入圖片描述
對(duì)于arr[3][5]這個(gè)數(shù)組,本質(zhì)上是這樣的,arr有三個(gè)元素,每個(gè)元素是(有五個(gè)整型元素的)一維數(shù)組,我們說數(shù)組名表示首元素的地址,即第一行一維數(shù)組的地址,一維數(shù)組的地址就要用指向一維數(shù)組的指針來存放,即寫成void test(int (*arr)[5]){}數(shù)組指針的形式。
解釋:arr是個(gè)指針,指向的是5個(gè)元素的數(shù)組,元素類型為int,(說明一下,(*arr)如果不加(),則arr會(huì)優(yōu)先跟[5]結(jié)合,因?yàn)?code>[]優(yōu)先級(jí)更高)
不懂為什么這么寫的可以去看這篇博客數(shù)組指針(用幾個(gè)例子來看看用法)【點(diǎn)擊即可跳轉(zhuǎn)】
有人肯定在想,二維數(shù)組用二級(jí)指針可以嗎?即void test(int **arr){}//ok?–No,當(dāng)然不行啦,雖然它們都帶有“二”,但二維數(shù)組和二級(jí)指針沒有任何關(guān)系噢
void test(int* arr)可以嗎?也不行。二維數(shù)組名傳過去的實(shí)際上是第一行一維數(shù)組的地址,這里就肯定不能用一個(gè)整型指針int* arr來接收(要用數(shù)組指針),整型指針是用來存放整型變量地址的。
在這里插入圖片描述

指針傳參

一級(jí)指針傳參

int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9};int *p = arr;int sz = sizeof(arr)/sizeof(arr[0]);//一級(jí)指針p,傳給函數(shù)print(p, sz);return 0;
}

對(duì)于 print(p, sz);我們傳參,函數(shù)print()的形參部分應(yīng)該怎么寫呢?
答案如下

void print(int *p, int sz)

我們要打印出來arr的元素,則整段代碼為

#include <stdio.h>
void print(int *p, int sz)
{int i = 0;for(i=0; i<sz; i++){printf("%d\n", *(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]);//一級(jí)指針p,傳給函數(shù)print(p, sz);return 0;
}

有人肯定會(huì)問,一級(jí)指針用一維數(shù)組傳可以嗎?
即寫成

void print(int p[], int sz)

運(yùn)行一下
在這里插入圖片描述

答案是:可以的。畢竟一維數(shù)組的本質(zhì)還是指針。但是不建議這樣寫,還是對(duì)應(yīng)寫成指針的形式比較好,一級(jí)指針傳過去就用一級(jí)指針接收比較好。
Alt
那接著我們思考一下
當(dāng)一個(gè)函數(shù)的參數(shù)部分為一級(jí)指針的時(shí)候,函數(shù)能接收什么參數(shù)?
比如:

void test1(int *p)
{}

test1函數(shù)能接收什么參數(shù)?

void test1(int* p)
{}
int main()
{int a;test1(&a);//整型的地址放到整型的指針里去,當(dāng)然是可以的
}

還能怎樣寫?

void test1(int* p)
{}
int main()
{int arr[10] = { 0 };test1(arr);
}

數(shù)組名代表首元素地址,arr元素是int型的,所以對(duì)應(yīng)上面int* p也是可以的。
當(dāng)然,直接傳一級(jí)指針過去也是可以的

void test1(int* p)
{}
int main()
{int a;int* p1 = &a;test1(p1);
}

二級(jí)指針傳參

對(duì)于下面

int main()
{int n = 10;int*p = &n;int **pp = &p;test(pp);//傳的是二級(jí)指針變量return 0;
}

test(pp);傳的是二級(jí)指針變量,那就用二級(jí)指針接收。

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

Alt
思考一下,當(dāng)函數(shù)的參數(shù)為二級(jí)指針的時(shí)候,可以接收什么參數(shù)?
比如:

void test(int** ptr)
{}

test函數(shù)能接收什么參數(shù)?
當(dāng)然還可以這樣:

#include <stdio.h>
void test(int** ptr)
{printf("num = %d\n", **ptr); 
}
int main()
{int n = 10;int*p = &n;int **pp = &p;//test(pp);test(&p);//一級(jí)指針變量的地址取出來放到二級(jí)指針里面去return 0;
}

當(dāng)然還可以這樣:

#include <stdio.h>
void test(int** ptr)
{printf("num = %d\n", **ptr); 
}
int main()
{int* arr[10] = {0};test1(arr);
}

arr數(shù)組的元素類型是int*,數(shù)組名arr代表數(shù)組首元素的地址,即int*的地址,那么就可以放到二級(jí)指針里面去。即指針數(shù)組的數(shù)組名可以傳過去。
在這里插入圖片描述

以上就是我總結(jié)的關(guān)于"數(shù)組傳參,指針傳參"的相關(guān)內(nèi)容
如果對(duì)你有幫助,別忘了點(diǎn)贊👍+收藏
歡迎大家的指導(dǎo)
我的主頁還有其他內(nèi)容,關(guān)注?我,我們一起學(xué)習(xí)一起成長(zhǎng)!

http://m.risenshineclean.com/news/65952.html

相關(guān)文章:

  • 深圳企業(yè)網(wǎng)站建設(shè)制作網(wǎng)絡(luò)流量統(tǒng)計(jì)工具
  • 如何用word做網(wǎng)站西安網(wǎng)絡(luò)公司
  • 廣州網(wǎng)站建設(shè)推廣網(wǎng)絡(luò)營(yíng)銷策劃
  • 114做網(wǎng)站同城推廣
  • 網(wǎng)站建設(shè)集團(tuán)網(wǎng)站收錄提交
  • 武漢網(wǎng)站設(shè)計(jì)價(jià)格谷歌廣告上海有限公司官網(wǎng)
  • 不允許做企業(yè)網(wǎng)站百度官網(wǎng)認(rèn)證
  • 如何介紹網(wǎng)站模板下載seo診斷方法步驟
  • 中國(guó)建設(shè)銀行網(wǎng)站官網(wǎng)網(wǎng)址關(guān)鍵詞快速優(yōu)化排名軟件
  • 廈門網(wǎng)站免費(fèi)制作百度優(yōu)化培訓(xùn)
  • 特產(chǎn)網(wǎng)站怎么做宣傳推廣方式
  • 阿里云服務(wù)器可以做網(wǎng)站嗎臨沂seo代理商
  • 提供做網(wǎng)站費(fèi)用百度指數(shù)資訊指數(shù)
  • 電商平臺(tái)有哪些公司湖北網(wǎng)站seo設(shè)計(jì)
  • 網(wǎng)站開發(fā)項(xiàng)目團(tuán)隊(duì)考研培訓(xùn)機(jī)構(gòu)排名前五的機(jī)構(gòu)
  • 網(wǎng)站購(gòu)物車js代碼怎么做他達(dá)拉非片
  • 哪個(gè)網(wǎng)站做畫冊(cè)牛逼網(wǎng)頁制作
  • 網(wǎng)站seo關(guān)鍵字discuz論壇seo設(shè)置
  • 專業(yè)APP客戶端做網(wǎng)站蘇州首頁關(guān)鍵詞優(yōu)化
  • 如何做一個(gè)網(wǎng)站營(yíng)銷策劃方案1000例
  • 網(wǎng)站域名禁止續(xù)費(fèi)自助建站系統(tǒng)源碼
  • 青島建站模板制作什么平臺(tái)打廣告比較好免費(fèi)的
  • 珠海 網(wǎng)站 設(shè)計(jì)百度收錄查詢
  • 做pc端網(wǎng)站訊息上海廣告公司
  • 網(wǎng)站建設(shè)排名奉節(jié)縣關(guān)鍵詞seo排名優(yōu)化
  • 番禺人才網(wǎng)賬號(hào)是什么南昌seo網(wǎng)站推廣
  • 網(wǎng)站建設(shè) 長(zhǎng)安淄博網(wǎng)站優(yōu)化
  • 網(wǎng)站建設(shè)案例資料國(guó)外免費(fèi)網(wǎng)站域名服務(wù)器查詢
  • 網(wǎng)站建設(shè)怎么開票怎么建立自己的網(wǎng)站
  • 做網(wǎng)站v1認(rèn)證是什么意思常見的網(wǎng)絡(luò)營(yíng)銷平臺(tái)有哪些