指针
P和*P
#include<stdio.h>
int main()
{
int *p //p是变量的名字,int*表示p变量存放的是int类型变量的地址
int i=3;
p=&i;
- p保存了i的地址,因此p指向i
- p不是i,i也不是p。修改p的值不会影响i的值。就像是,房间i里存放有东西,p是房间号。
- 如果一个指针变量指向了某个普通变量,则“*指针变量”就等同于“普通变量”
例子:
如果p是个指针变量,并且p存放了普通变量i的地址,
则p指向了普通变量i, *p就完全等同于i
或者说:在所有出现 *p的地方都可以替换成i
在所有 i出现的地方都可以替换成 *p
- int *p不表示定义了一个名字叫 *P的变量,应该这样理解:p是变量名,变量p的数据类型是Int* 类型。所谓int*类型,就是存放int变量地址的类型
比如:i的地址为2000H,里面的变量为3,p的地址为1000H。p指向i,就是p里存着2000H,即i的地址在p里,3在i里。则*p=i。
*p就是以p的内容为地址的变量。
指针和指针变量是两个不同的概念,指针就是地址,指针变量是存放地址的变量,但是平常叙述是会把指针变量说成指针。
指针的重要性
- 表示一些复杂的数据结构
- 快速的传递数据
- 使函数返回一个以上的值
- 能直接访问硬件
- 能够方便的处理字符串
- 是面向对象语言中引用的基础
指针的分类
- 基本类型指针
- 指针和数组
- 指针和函数
- 指针和结构体
- 多级指针
地址
- 内存单元的编号
- 从零开始的非负整数