#include <stido.h> int main(void){ int* p; //定义了一个存放整形数据的指针的变量p int i=3; p=&i; //&取变量i的地址。存放在p中 p=i; //error,i是整形变量,p是整形变量的地址,二者冲突 p=55; //error,p只能存放整形数据的地址 }
p保存了i的地址,因此p指向i
p不是i,i也不是p,更准确来说:修改p的值不影响i的值,修改i的值不影响p的值
如果一个指针变量指向了某个普通变量,则
(*指针变量) 完全等同于 (普通变量)
例:如果p是个指针变量,并且p存放了普通变量i的地址
则p指向了普通变量i
(*p ) 完全等同于 (i)
或者说:在所有出现*p的地方都可以替换成i
在所有出现i的地方都可以替换为*p
*p就是以p的内容为指针的变量
原因:C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。
指针就是地址,地址就是指针,地址就是内存单元的编号
指针变量就是存放地址的变量
通常把指针变量简称为指针,但二者不同
地址:从0开始的,内存单元的编号,【0-2的n次方-1】
指针:指针的本质就是一个操作受限的非负整数
1. 表示一些复杂的数据结构
2. 快速地传递数据
3. 使函数返回一个以上的值
4. 可以直接访问硬件
5. 能够方便的处理字符串
6. 是理解面向对象语言中引用
的基础
1.基本类型指针(重点)
2.指针和数组
3.指针和函
4.指针和结构体(重点)
5.多级指针