1:返回引用的的函数。
数据类型 *指针变量名[行长度];
和一般的函数相比,只要在返回值类型后加上&符号即可,函数就会返回return
后变量的的引用。
int& index(int i)
如
int array[5]={1,2,3,5,7};
{
return array[i];
}
执行index(4)=3;以后array[[4]的值会赋值为3.
只能返回全局变量和静态变量,不能返回方法内部定义的变量-局部变量。
2:函数指针
顾名思义是函数的指针,函数指针定义形式为:返回类型(*指针变量名)(形参类型表)
如:int (*p) (int ,int);
另外:函数名就是函数的首地址。
3:指针变量的声明
数据类型 *变量名 =NULL 或0
如int *p= NULL或0 表示指针指向一片无效的不可访问的内存。
4:指针与数组
如:int a[]= {1,2};int *p=NULL; p=a;//a表示该片首地址。
现在p与a指向同一片地址,不过p是指针变量,a是常量指针。
4.1:使用指针操作二维数组
4.1.1:使用指向行的指针变量去操作二维数组
对于二维数组来说数组名表示第0行的首地址。即对于a[2][3]来说,a与&a[0]等价;而a[0]代表a的第一行的首地址与&a[0][0]等价。
指向行的指针变量声明方式如下:(具体说是指向行地址)
数据类型
(*指针变量名)[行长度];//说明指针变量是一个指向行的指针,仅此而已,这要注意和指针数组区别开来,指针数组声明方式是 数据类型
*指针变量名[行长度];没有括号。
如: int a[][2]={1,2};int(*p)[2]=NULL;p=a;
接下来p就可以代替a去访问a的元素了。
4.1.2:使用指针变量访问数组
由于不管是一维数组还是二维数组,在内存中都是连续的。
int a[][2]={1,2,3,4};int
*p=NULL;p=a[0];
则p[0],p[1],p[2],p[3]分别就是a[0][0]等
5:指针数组
每个元素都是指向同一数据类型的指针变量
6:指向指针的指针
数据类型 **变量名
int main()
{
int i,j,a[][2]={1,2,3,4,5};
int *p[3];
int **pp;
for(i=0;i<3;i++)
p[i]=a[i];
pp=p;
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
cout<<*(*(pp+i)+j)<<"
";
cout<<endl;
}
return 0;