C++语言程序设计

定义了一个指针之后，必须对它初始化之后才能使用，否则将可能会造成系统出错，这一点与其它变量类似。对指针初始化的时候，是要将内存中的一个合法地址赋给它。指针变量中只能存放地址（指针），不能将一个整型量（或任何其它非地址类型的数据）赋给一个指针变量。
变量、数组元素、结构成员等变量的地址都是用运算符&取得的，如：
int a, b[5];
变量a的地址可通过表达式&a得到，数组元素b[5]的地址可通过表达式&b[5]得到。数组名是的该数组所占内存空间的首地址，同样，函数名也是函数的入口地址，例如：
char str[10];
double max(double []);
在上面的定义中，字符数组str的首地址就是数组名str；函数max(double [] )的入口地址就是max。
指针运算符有两个：
（1）运算符&
它是一个单目操作符，即只有一个操作数，它返回的是操作数的存储单元地址。
如：abc_addr=&abc;
表示将变量abc的地址赋给变量abc_addr。这里，abc_addr必须是指针变量。
（2）运算符*
也是一个单目操作符，它返回的是操作数（指针变量）所指的地址的内容。
如：*abc_addr表示获取指针变量abc_addr所指的地址的内容。
设有指向整型变量的指针变量p，如要把整型变量a 的地址赋予p可以有下面两种方式：
(1) 指针变量初始化的方法
int a;
int *p = &a; //定义时初始化
(2) 赋值语句的方法
int a;
int *p;
p = &a;
不允许把一个数赋予指针变量，例如：
int *p;
p=1000; //错误：不能将一个整型数赋给指针变量
被赋值的指针变量前不能再加"*"说明符，如写为"*p=&a;"，也是错误的。
我们再看下面的例子:
int i=200, x;
int *ip;
定义了两个整型变量i、x及一个指向整型数的指针变量ip。i、x中可存放整数，而ip中只能存放整型变量的地址。我们可以把i的地址赋给ip：
ip=&i;
此时指针变量ip指向整型变量i，假设变量i的地址为1800，这个赋值可形象理解为下图所示的联系。

| 图7-5

以后我们便可以通过指针变量ip间接访问变量i，例如:
x=*ip;
运算符*访问以ip为地址的存贮单元，而ip中存放的是变量i的地址。因此，*ip访问的是地址为1800的存贮单元(因为存贮单元中存放的是整数，实际上是从1800开始的两个字节)，它就是i所占用的存贮单元，所以上面的赋值表达式等价于：
x=i;