目录
一、指针是什么
二、指针和指针类型
三、野指针
四、指针运算
五、练习题
一、指针是什么
1、指针是内存中一个最小单元的编号,也就是地址。
2、平时我们所说的指针,其实就是指的指针变量,是用来存放内存地址的变量。
总结:指针就是地址,口语中说的指针通常指的是指针变量。
#include <stdio.h>
int main()
{
int a = 10;
int *pa = &a;
return 0;
}
这里的pa就是指针变量,它是用来存放a的地址的。
这就是通过地址的管理,来访问内存。
那么指针(地址)的大小是多少呢?
32根地址线,产生的2进制序列有32位--------4个字节
64根地址线,产生的2进制序列有64位--------8个字节
二、指针和指针类型
要将&num(num的地址)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的呢?我们给指针变量相应的类型。
int num = 10;
p = #
char* pc = NULL;
int* pi = NULL;
short* ps = NULL;
long* pl = NULL;
float* pf = NULL;
double* pd = NULL;
指针类型的意义是什么?
1、指针的类型决定了指针向前或者向后走一步有多大(距离)
比如上面的int类型,+1指针向后走了4个字节。而char类型,+1指针向后走了1个字节。
2、指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)
观察上面的图片,如果是char类型的,指针解引用的时候访问一个字节。
观察这个图片,可以看出和上面的有所差别,如果是int类型的,指针解引用的时候访问4个字节。
三、野指针
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。
野指针形成的原因有三条:
1、指针未初始化
2、指针越界访问
3、指针指向的空间释放
如何规避野指针
1、指针初始化;
2、小心指针越界;
3、指针指向的空间被释放,及时置NULL;
4、避免返回局部变量的地址;
5、指针使用之前检验有效性。
四、指针运算
1、指针加减整数
2、指针减指针
3、指针的关系运算
最后说一下标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
五、练习题
1、
答案解析:
2、
答案解析: 注意观察二维数组的初始化部分,里面是逗号表达式,而不是大括号的形式,所以放在数组里面的是1,3,5,0,0,0。所以p[0]=1。
欢迎老铁们在下面评论,指出错误,共同进步。