1.指针的概念
指针就是地址,利用这个地址可以在电脑的内存中找到指定的数据
一个变量的地址称为该变量的“指针”
一个变量保存的是另一个变量的地址,称为“指针变量”
2.简单的一级指针的使用:
定义 : 类型 *变量名=&变量名;
如:int x = 10;
int *p = &x; (或者写成:int* p=&x;)
#include<iostream>
using namespace std;
//一级指针
int main() {
int *p;
int x = 5;
p = &x;
cout << "&x=" << &x << endl;
cout << "p=" << p << endl; //p为指针变量,p存放的是x的地址(&x:表示取x的地址)
cout << "*p=" << *p << endl; //*p相当于x
cout << "&*p=" << &*p << endl; // &*p==&(*p)== &x &h和*操作符的优先级相同,且从右至左执行
return 0;
}
3.野指针
野指针:我们知道指针是会指向一个内存单元的,而野指针是指“这个指针所指向的地址使我们不可知的,是随机的”。野指针是非常危险的,也是非常严重的,我们应该避免野指针。
1、定义一个指针变量时没有初始化
int *p;
//都知道我们在定义一个非指针的变量时如果没有初始化,
//则这个变量的值是随机的(如:int a;)
//指针变量同样如此,指针变量的随机值的意思就是说他指向的位置是随机的
2、动态开辟的内存空间在使用完后调用free函数释放掉这段内存空间,却没有将对应的指针职位NULL。虽然开辟的空间被释放掉但指针依旧存在。
int func()
{
int *p = malloc(sizeof(int));
free(p);//没有将p值为NULL的操作
}
3、对指针的操作已经超出了指针变量的作用域
//比如通常我们实现了一个函数,该函数里创建了一个指针变量,而函数结束时最终返回这个指针变量,但是函数调用结束后,
该函数的函数栈帧就会被销毁,所以返回的这个指针变量所指向的空间已经被释放了因此这个指针变量指向的空间就变成了随机的。
参考:https://blog.csdn.net/qq_40927789/article/details/8068672