对已说明的变量来说,变量名就是对变量值的直接引用。对指向变量或内存中的任何对象的指针来说,指针就是对对象值的间接引用。如果p是一个指针,p的值就是其对象的地址;*p表示“使间接引用运算符作用于p”,*p的值就是p所指向的对象的值。
*p是一个左值,和变量一样,只要在*p的右边加上赋值运算符,就可改变*p的值。如果p是一个指向常量的指针,*p就是一个不能修改的左值,即它不能被放到赋值运算符的左边,请看下例:
例 7.1 一个间接引用的例子
- #include <stdio.h>
- int main()
- {
- int i;
- int * p ;
- i = 5;
- p = & i; /* now * p = = i */
- /* %Pis described in FAQ VII. 28 */
- printf("i=%d, p=%P, * p= %d\n" , i, P, *p);
- * p = 6; /* same as i = 6 */
- printf("i=%d, p=%P, * p= %d\n" , i, P, *P);
- return 0; /* see FAQ XVI. 4 */
- }
上例说明,如果p是一个指向变量i的指针,那么在i能出现的任何一个地方,你都可以用*p代替i。在上例中,使p指向i(p=&i)后,打印i或*p的结果是相同的;你甚至可以给*p赋值,其结果就象你给i赋值一样。