首先这个问题比较低级,写在此对自己做个提醒,永远不要忘了基础的东西。
首先看一维的情况:
一般三种方式:
f(int []),f(int a[]),f(int *a):第一二中几乎相同都用·数组来传递,第三种用指针传递;不同在于指针可以根据变量来分配数组长度,而数组必须定义的时候就指定。
其次来看一下二维的情况:
一般也有三种方式:
f(int a[][]):对应的数组定义为int a[2][3];
f(int *a[]):对应的数组定义为int* a[2] for(int i=0;i<2;i++) a[i]=new int[3];
f(int **a):对应的数组定义应该为 int** a=new int* a[2];for(int i=0;i<2;i++)a[i]=new int[3];
当然你也可以把二维数组转化成一维~~!
补充一下:
引用的传递:
f(int &a):传递普通类型引用
f(int (&a)[10]):传递数组的引用
函数指针
void (*f)(int,int) 函数指针的声明
f=func;函数指针的赋值(在之前需要声明func函数例如:void func(int a,int b))
函数数组指针
void (*f[10])(int,int)
f[0]=func
指针和引用
本质上:
指针在符号表中:指针名+指针的地址(不是指针指向的变量地址)
引用在符号表中:引用名+变量地址
因此:int & const a=b;错
int *const a=b 对