接下来我们来介绍一下什么是指针? 指针其实就是元素存放地址,更加形象的比喻:在酒店中如果你想要去注必须去付费不然不能住,在计算机也同样如此(但是不需要付费哦)每当我们使用一个变量或其他需要申请空间的时候计算机就会自动开辟一段空间也就相当于酒店中每一个房间都有一个固定的房间号,在对应的房间号内可以找到固定的人,同样在正确的内存空间内也可以找到对应的数据,如果你想找的数据不在这一空间那么无论如何也是找不到得。
就跟找门牌号一样找地址也可以提高寻找效率(要不然一个一个找该有多慢啊)
计算机常见单位的(补冲):
⼀个⽐特位可以存储⼀个2进制的位1或者0
1. 指针变量和地址
在这里我们将100赋值给a,&这个符号可以将a的地址取出在经过cout函数进行打印输出我们就可以产看a的地址。
地址的用处当然不止于此通过地址我们也可以改变量中的值,但是在这之前我们需要先介绍什么是指针变量?
顾名思义指针变量就是存放指针的变量,它可以存放其他变量元素在内存空间中的地址,在这里需要特别注意的是指针变量本身也是有地址的只不过它的地址中存放的数值是其他数据的内存空间。
下面我们来介绍指针变量的使用方法:
int a = 100;
int* p = a;
在这里int*就是指针的类型如果我们要改变a的值只需对指针p进行解引用操作也就是:
*p = 12;
此时a的值也为12,我们一般使用指针用与函数传参时的使用,众所周知形参只是对实参的一份临时拷贝改变形参无法改变实参的值,因此在这里我们用指针来完成这个操作,由于指针进行解引用操作时直接访问该元素的地址因此*p的改变可以影响到a。
整形指针的写法是这样其他数据类型的指针使用方法也可以得知:
long long* double double* float float* short short*
不同的数据类型的使用是一致的,我们只需照葫芦画瓢就可以。
下面我们来介绍一下什么是数组指针,大家猜一下它究竟是数组还是指针呢?数组指针无论名字怎样它还是指针,是一个存放数组的指针,下面我们就来介绍它的基本使用方法;
void test() {
int arr1[5] = { 1,2,3,4,5 };
int arr2[5] = { 6,7,8,9,10 };
int* num[2] = { arr1,arr2 };
}
int main() {test();
return 0;
}
指针数组的用法同数组一般无二,num也是储存的首地址,但是不同的是访问时需要进行解引用操作:
这样就可以访问数组指针中的元素了。当然这两个解引用的意思是有一定的差异的,第一个*截取的是数组的首地址也就是arr1第二个则是截取arr1中的第二个元素。
接下来我们来讲解const修饰指针:
const修饰指针有两种方法一种是前置一种是后置:
第一种写法表示指针p1的指向可以改变但是指针的数值不能发生改变,第二种表示指针的指向可以不可以发生改变,但指针的值可以发生改变。
接下来我们来简要介绍野指针:
野指针的定义有三种:1.指针未初始化 2.指针的越界访问
显而易见如果我们想要规避野指针我们必须避开这两项,因此我们在使用数据数据时要避免访问越界 ,在定义指针时如果我们不知道该指向什么那么就把他定义为NULL,这样就可以有效避免野指针的的形成。