对于指针:
1.指针相当于取地址,指针==地址;
2.获取任何变量的地址都是:&变量名;
3.*指针变量名,则间接访问(解引用)到指针指向的变量;
以下面的代码为例,进行详细解释
int main
{
int a=10;
int b=20;
int *p=&a;//这里的*p,是个定义,说明p是个指针变量;先定义后使用时:int *p; p=&a;
*p=100;//进行了解引用,则直接访问p所指向的变量a,所以该语句是对a赋值为100;
p=&b;
*p=200;//这里同理,对b赋值为200;
int **pp=&p;//这里定义pp是个二级指针,int a,&a→int *,int *p,&p→int**;
*pp=&a;//二级指针pp指向p,指针p指向的是a;使用二级指针时,去掉一个*号;
**pp=1000;//进行解引用,二级指针pp直接指向变量a,所以a=1000;
*pp=&b;//同上,p=&b;
**pp=2000;//对b赋值为2000;
}
以下代码实现程序的奔溃
#include <stdio.h>
void fun(int **p)//&a→int *,&p→int **
{
*p=NULL;//解引用
}
int main()
{
int a=10;
int *p=&a;
fun(&p);//被调用函数调用指针变量时,必须对变量取地址
printf("%d",*p);
return 0;
}