指针数组作为参数在函数间传参,指针数组作为参数传递
自定义函数中的形参类型应该对应于函数调用中传递的实参类型。
测试函数的类型是int,我们传递的参数A也是int类型。
无效测试(整数){
}
int main(){
int a=1测试(a);
返回0;
}好了,现在你知道函数参数传递的基本概念了!然后我们来分析一下数组传参和指针传参的代码!
一维数组通过参数判断下面是真还是假!
包括stdio.h
//第一名
void test(int arr[]){
}
//第二名
void test(int arr[10]){
}
//第三名
无效测试(int *arr){
}
//第四名
void test2(int *arr[20]){
}
//第五名
void test2(int **arr){
}
int main(){
int arr[10]={ 0 };
int * arr 2[20]={ 0 };
测试(arr);
test 2(arr 2);
返回0;
} 1号参数以数组形式接收,正确。
2号也是数组的形式,没错。
请注意,传递数组参数不会创建新数组。
所以函数[]中的数字是多少并不重要
3号数组名是第一个元素的地址,用指针接收。正确。
NO.4 arr2是指针数组,(int *arr[20])对应原数组,正确。
5号的数组名是第一个元素的地址,arr2的第一个元素是int*类型。
可以用二级指针接收。正确!
二维数组传递参数在了解了一维数组之后,我们再来看看二维数组。
以下函数通过,哪些是对的,哪些是错的?
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 };
测试(arr);
返回0;
}根据二维数组传递参数的代码复习以下知识点。
(1)二维数组的第一个元素是第一行。
(2)定义二维数组时,可以省略行,不能省略列。
第一行的类型是int[5],要放在数组指针里!
一维指针参数传输
#包含stdio.h
Void print(int*p,int sz){//用int *接受
int I=0;
for(I=0;我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]);
打印(p,SZ);//传递给函数的第一级指针P
返回0;
}二维指针引用下面是两级指针引用的基本形式。
的类型是pp int**,p是指针变量的地址,应该由二级指针接收。
#包含stdio.h
无效测试(int** ptr){
printf(num=%d\n ,* * ptr);
}
int main(){
int n=10
int * p=n;
int * * PP=p;
测试(PP);
测试(p);
返回0;
}让我们看看下面的代码
这三个参数的类型P,pp,arr都是二级指针。
在测试函数中,char**用于接收它。
无效测试(char** p){
}
int main(){
char ch= w
char * p=ch
char * * PP=p;
char * arr[5];
测试(p);
测试(PP);
测试(arr);
返回0;
}arr是指针数组的数组名,是数组第一个元素的地址。
数组的第一个元素是char*类型的,所以它应该由一个二级指针接收。
-结束-
,作为作者请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。