一、函数的参数什么时候用int **a
函数定义中参数叫形参。函数调用时,调用者使用的参数数据为实参。
当实参是一维指针变量的地址时,形参要用二维指针。
如:main()
{
int *p; //定义一个指针变量p,p也有自己的存储地址,p中可以存放别的整型变量的地址
int i=123;
p=&i ;
init_i( &p) ; //传p的地址过去。p中存的是i的地址
}
init_i( int **a )
{
printf("val=%d\n" , **a ); //*a是i的地址,**a是i的值
}
以上只是为了说明int **a的意义,即:当实参是一维指针变量的地址时,形参要用二维指针。
二、int a[]
当实参是个数组时,形参我们一般这样写int a[],也可以写成 int *a
它们所表示的意义是,传递数组的首地址到子函数中!
三、int (* a)[10] 这里括号中的10不可少!
这叫
数组指针,即a是个指针,它的
数据类型是个int[10](有10个元素的数组)。
a+1 会跳过一个int[10]的空间
a+2 会跳过两个int[10]的空间
当实参为
二维数组时,会这样传递参数,如:
main()
{
int aa[3][10]; //定义一个二维数组aa
init_i( aa ,3 ) ; //传aa的值(数组首地址)过去,同时,告诉子函数有几行
}
init_i( int (*a)[10] , int n )
{
int i,j;
for( i=0;i<n;i++ )
for( j=0,j<10;j++ )
a[i][j]=i*j ; //可以按二维数组操作a
}