访问指针的值
通过对指针变量解引用,实现数据的读取与修改,相当于操作原对象,这称为间接访问。
#include <stdio.h>
int main()
{
int a = 2;
int *p = &a;
// *p:解引用p指向的地址处的值
printf("*p=%d\n", *p);
// 错误:指针变量的值,存储的是一个地址,而不是数值。
// p = 5;
// *p在赋值运行符左边,代表为该地址的变量赋值
// p指向a,这里*p代表向a赋值
*p = 5;
// p是的a间接引用,两者是一致的。
printf("a=%d\n", a);
printf("*p=%d\n", *p);
return 0;
}

重新指向
指针自身也是变量,这就代表它可以被重新赋值,也就说重新指向另一个对象。
#include <stdio.h>
int main()
{
int a = 2;
int *p = &a;
// 指针本身也是变量,也就是说它可以指向其它对象。
// 这时指针将指向b,而非a了。
int b;
p = &b;
// 现在对*p的修改相当于改变b的值
*p = 123;
printf("a=%d\n", a);
printf("b=%d\n", b);
printf("*p=%d\n", *p);
return 0;
}

花式访问
这个示例中,我们变着花样访问数值,目的是让我们更好的理指针与值的概念。
int main()
{
// 每个变量都有一个唯一的地址
int a = 7;
// 取变量a的址址,只是没有把它赋给一个指针罢了!
&a;
// 先取地址,再访问此地址处的值,只不过这个值没有参与任何运算罢了。
*&a;
// 这与上面语句效果相同
a;
printf("a=%d\n", *&a);
*&a = 256;
printf("a=%d\n", *&a);
// 相当于 int *pa = &a;
int *pa = &*&a;
printf("*pa=%d\n", *pa);
*pa = 128;
printf("*pa=%d\n", *pa);
printf("a=%d\n", a);
return 0;
}
