朋友們,到站啦!指針進階第四站:傳參問題
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*類型
可以用二級指針來接收,正確!
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、一級指針傳參
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是指針變量的地址,要用二級指針來接收
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編譯器會報錯“類型不一致”
結語
傳參問題并不算非常難,但我們仍要熟練掌握
這樣才能避免在寫自定義函數的時候出現參數類型不同的bug!
第四站數組傳參到這里就結束啦!
審核編輯:湯梓紅
-
指針
+關注
關注
1文章
481瀏覽量
70593 -
代碼
+關注
關注
30文章
4820瀏覽量
68882 -
數組
+關注
關注
1文章
417瀏覽量
25999
原文標題:【C語言】指針進階第四站:數組/指針的傳參問題!
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論