指针也可运用取地址运算符&,例如: int i; int *p = &i; 在以上声明中,p是指针,指向变量i的地址,*为解引用符,*p即是i的值,&是取地址运算符,&p是存放指针p的地址。 看如下2个代码: 1. int *Example(int *test) { int i; // 局部变量,在堆栈中分配,函数调用完成后失效 int *p; i = *test; i += test; p = &i; return p; // 此处错误地返回了局部变量i的地址,但编译器不会报错 } 2. int *Example(int *test) { int *p; // p是局部变量,存放指针p的地址在堆栈中 p = test; // p指向指针test,尽管p是局部变量,但p指向的地址是调用者传递进来的 return p; // 正确,返回的是p所指向的地址,而不是p本身 }