指针基础
计算机的最小寻址单位:字节
变量的地址:变量第一个字节的地址
指针:简单来说指针就是地址
指针变量
指针变量:存放地址的变量,有时候也把指针变量称为指针
思考:指针变量只是存放变量的首地址,那怎么通过指针访问指针指向的对象?
答:声明时需要指明指针的基础类型(指针指向对象的类型),这样既知道了变量的首地址也知道了这个变量所占的内存大小,便可以访问此对象了。
int* p;
int 是指针的基础类型
*p 相当于变量 i 的别名,修改 *p 相当于修改 i
注意事项:
1、指针变量是 p ,不是 *p
2、指针变量类型是int*,而不是int
两个基本操作:&(取地址) 和 *(解引用)
例:
//取地址
int i = 1;
int *p;
p = &i;
解引用:通过指针访问指针指向的对象
通过 i 去访问:直接访问(访问一次内存)
通过 *p 去访问:间接访问(访问两次内存)
野指针问题
野指针:未初始化或指向未知区域的指针
例:
int *p1;
int *p2 = 0x7F;
对野指针进行解引用运算,会导致未定义的行为!
未定义的行为:程序可能崩溃也可能正常运行
指针变量的赋值
- 通过取地址符赋值,p = &i
- 通过另外一个指针赋值,p = q
注意事项:p = q 和 *p = *q 的区别
p = q:
*p = *q: