1.什么是指针?
指针是一个变量,存储另外一个变量的地址,即内存的直接地址。声明形式如下:
int *a;//整型指针,指向整型变量的内存地址
double *b;//double型指针,指向double型变量的内存地址
char *c;
float *d;
所有指针的值的实际数据类型都是一样的,是一个代表内存地址的十六进制数。
2.指针的使用
使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。实现代码如下:
#include <iostream>
using namespace std;
int main ()
{
int a = 2; //定义一个变量a
//定义方式1
int *p1 = &a;//定义一个指针变量P1,将变量a的地址赋值给指针P1
//定义方式2
int *p2;//声明一个指针变量P2
p2 = &a;//将变量a的地址赋值给指针P2
cout << "p1指针存储的地址值为 " << p1 << endl;
cout << "*p1值为" << (*p1) << endl;
cout << "p2指针存储的地址值为 " << p2 << endl;
cout << "*p2值为" << (*p2);
}
以上代码输出结果为:
p1指针存储的地址值为 0x7fff1159c14c
*p1值为2
p2指针存储的地址值为 0x7fff1159c14c
*p2值为2
3.空指针
含义:NULL 指针是一个定义在标准库中的值为零的常量,即空指针是指向地址为0的变量。
如下代码可以说明空指针的含义:
#include <iostream>
using namespace std;
int main ()
{
int a = 1 ;
int *p1 = NULL;
cout << "p1指针存储的地址值为 " << p1 << endl;
int * p2 = &a; //将a变量的地址值赋给P指针
cout << "p2指针存储的地址值为 " << p2 << endl;
cout << "a变量的地址值是 " << (&a);
return 0;
}
以上代码输出结果为:
p1指针存储的地址值为 0
p2指针存储的地址值为 0x7ffcff846b98
a变量的地址值是 0x7ffcff846b98
注:此时 *p1 是不被允许使用的,大多数操作系统是不允许访问内存地址为0的内存空间的。
使用场景:当声明指针变量时,如果没有确切的地址可以赋值,则可为指针变量赋一个 NULL 值,赋为 NULL 值的指针被称为空指针,空指针是指指向内存地址为0的指针。
作用:地址为 0 的内存,是操作系统保留的。在大多数的操作系统上,程序不允许访问地址为0的内存,所以空指针可表明该指针指向一个不可访问的内存位置。
如果所有未使用的指针在声明时都被赋予空值,同时避免使用空指针,就可以防止误用一个未初始化的指针。很多时候,未初始化的变量存有一些垃圾值,导致程序难以调试。