指针和其他类型变量不同的是它有“两种”地址。由于指针仍然是变量,所以系统会分配一块内存,这块内存有一个地址,记住这个地址是系统分配的,不会出错。当然如果将这个地址存放在另一块内存中,那么就是双重指针了。另外,指针的特殊之处在,指针变量也是表示的地址,我们可以通过这个地址来访问其他变量,叫做间接访问。指针的初始化,就是讨论指针变量“这块内存”的赋初值问题。
第一个问题,为什么要进行初始化
void change(int *x, int*y)
{
int *temp;
*temp = *x;
*x = *y;
*y = *temp;
}
第 二个问题,如何对指针进行初始化
有两个方法
int a = 0;
int *p =&a;
由于系统会自动在可访问的区域定义a,所以&a一定是可访问的,同时可以知道*p = 0。但这种方法有点麻烦。
int *p = NULL;
系统定义NULL其实就是0,但是表示指针是一般用NULL。0这块地址是不可访问的,所以如果用到*p就会出错,让错误暴露出来而不是隐含在程序中,这就迫使在使用*p之前先对它正确地赋值。所以比较好的风格是在使用指针之前先检查一下
if(p == NULL)
…
或者
assert(!p);