&i表示取变量i的地址,int *pi = &i;表示定义一个指向int型的指针变量pi,并用i的地址来初始化pi;
可以用一个指针来初始化另一个指针,例如:
int i;
int *pi = &i;
int *ptri = pi;
我们知道,在堆栈上分配的变量初始值是不确定的,也就是说指针p所指向的内存地址是不确定的,后面用*p访问不确定的地址就会导致不确定的后果,如果导致段错误还比较容易改正,如果意外改写了数据而导致随后的运行中出错,就很难找到错误原因了。像这种指向不确定地址的指针称为“野指针”(Unbound Pointer),为为避免出现野指针,在定义指针变量时就应该给它明确的初值,或者把它初始化为NULL;例如:
int main(int argc, char *argv[])
{
int *p = NULL;
...
*p = 0;
...
return 0;
}