函数指针变量
一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。
int (*p) (int,int); //定义指向函数的指针变量p
(int): p所指向的函数的形参类型
p:是指向函数的指针变量
第一个 int:指针变量p指向的函数的类型
int max(int x,int y); //函数声明
int (*p)(int,int); //定义指向函数的指针变量p
int a,b,m;
p=max; //使p指向函数max
指针函数
int *a (int x,int y);
指针数组:指针数组中每一个元素相当于一个指针变量,它的值都是地址。
int *p[4];
指向指针的指针
char *p p为指向字符型数据的指针变量
char *(*p); p指向的是字符指针数据。
= char * * p;
数组名name代表该指针数组首元素的地址。name+i是name[i]的地址。
由于name[i]的值是地址(即指针),因此name+i就是指向指针型数据的指针。
#include <iostream>
using namespace std;
int main( )
{ char **p; //定义指向字符指针数据的指针变量p
char *name[]={″BASIC″,″FORTRAN″,″C++″,″Pascal″,″COBOL″};
p=name+2; //见图6.23中p的指向
cout<<*p<<endl; //输出name[2]指向的字符串
cout<<**p<<endl; //输出name[2]指向的字符串中的第一个字符
}
运行结果为
C++
C
指针数据类型:
p=&a; //将变量a的地址赋给p
p=array; //将数组array首元素的地址赋给p
p=&array[i]; //将数组array第i个元素的地址赋给p
p=max; //max为已定义的函数,将max的入口地址赋给p
p1=p2; //p1和p2都是同类型的指针变量,将p2的值赋给p1
指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示:
p=NULL;
引用: 为另一个变量起一个别名。&是引用声明符。
假如有一个变量a,想给它起一个别名b,可以这样写:
int a; //定义a是整型变量
int &b=a; //声明b是a的引用
以上语句声明了b是a的引用,即b是a的别名。
#include <iostream>
using namespace std;
int main( )
{ void swap(int &,int &);
int i=3,j=5;
swap(i,j);
cout<<″i=″<<i<<″ ″<<″j=″<<j<<endl;
return 0;
}
void swap(int &a,int &b) //形参是引用类型
{ int temp;
temp=a;
a=b;
b=temp;
}
输出结果为
i=5 j=3