地址与指针
地址
内存中有存储单元的唯一编号(用二进制编码,十六进制表示)
例如:
int i,j,k;
scanf("%d%d%d",&i,&j,&k);
⬇ ⬇ ⬇
3 6 9
printf("%d%d%d",&i,&j,&k);
其中:
地址 | 内存 | |
---|---|---|
.... | ||
2004 | i | |
2008 | j | |
2012 | k | |
..... |
直接访问:已知变量的地址,去访问变量里的数据。
间接访问:不知道变量的地址,去其他变量哪里获取,才能访问。
eg:
int i; //int表示整型,名为p的整型指针变量,只能存放int型普通变量的地址。
int *p; //定义指针变量,p表示变量名字,*表示指针(用来修饰在后面的p)
p = &i; //对指针变量进行初始化:p保存着(普通整型变量i)的地址p就指向了i
*p = 3;//等价于:i=3; (p=3是错误的)
printf("%d",*p);//也就等价于:printf("%d",i);
总结
牢记三句话:
若p保存了i的地址
则p就指向了i(即:建立起了合法的指向关系)
*p就是i(即:进而实现引用)
是引用运算符,*p即为以p的内容为地址的变量!*p和i成为了同一个概念!
注意:对指针来说,建立指向关系只是手段,实现指针的引用才是目的!
指针:通过他能找到以它的内容为地址的变量,指针和地址是同一个概念:指针就是地址,地址就是指针,指针和地址完全等价!!
指针和指针是两个完全不同的概念(水和杯子的关系)
指针变量就是存放地址的变量!!
注意:通常我们叙述时,常把指针变量简称为指针姑且:应给语境及其上下文进行正确的解读!