1、值传递
2、地址传递
注意:如果实参是一个普通变量,地址传参的话就需要形参是一级指针,
如果实参是一个一级指针,地址传参的话就需要形参是一个二级指针,
以此类推
3、传数组:
将数组作为参数传递给函数,不存在复制传参和地址传参,本质都是地址传参,所以在函数
内部对数组进行改变,则函数执行完毕后,原本的数组也会改变,因为传递给函数的都是数
组的地址
1、传一维数组
1 //传一维数组
2 //void fun1(int p[])//形式1
3 void fun1(int *p)//形式2(常用)
4 {
5 printf("%d\n",p[2]);
6 printf("%d\n",*(p+3));
7 }
2、传二维数组
//传二维数组
16 //void fun2( int p[][4] )//形式1
17 void fun2( int (*p)[4] )//形式2:通过数组指针
18 {
19 //p[x][y] <==> *(*(p + x) + y)
20 printf("%d\n", p[0][2]);
21 printf("%d\n", *(*(p+1) + 2));
22 }
3、传指针数组
//传递指针数组
void funcArray1(char **p,int len){
int i;
for(i=0;i<len;i++){
printf("item[%d] = %s\n",i,p[i]);
}
}
int main(){
char * user[]={"corporation","convinced","facilitate"};
funcArray1(user,3);
return 0;
}
这其实也意味着:
指针数组名 等同于一个二级指针