目录
概念
- 通过指针间接访问一块内存
定义
- 数据类型 * 变量名 = nullptr;
理解:指针变量同样也是一种数据类型,只不过存放的是一块空间的地址
int main(void)
{
//a 是一个int的变量,存的是10
int a = 10;
cout << "a的地址:" << &a << endl;
//p 是一个指针变量,存的是地址,具体是谁还不知道(野指针)
int* p;
//这时p存的是a的地址
p = &a;
cout << "p的地址:" << p << endl;
//通过p间接访问a的值
int num = *p;
cout << "间接访问a的值:" << num << endl;
system("pause");
return 0;
}
指针所占内存空间
- 在32位操作系统下:任意类型的指针变量都占4个字节
- 在64位操作系统下:任意类型的指针变量都占8个字节
空指针和野指针
- 空指针:指针变量指向内存中编号为0的空间,用于初始化指针变量(NULL、nullptr),指向的内存不可访问
- 野指针:指针变量指向非法的内存空间,指向的内存不可访问(避免出现)
用const修饰指针
常量指针
- const int *p = &a;
- 指针的指向可以修改,但是指针指向的值不可以修改
指针常量
- int * const p = &a;
- 指针的指向不可以修改,但是指针指向的值可以修改
两者可以同时存在,此时均不可以修改。
指针和数组
- 利用指针访问数组中的元素
指针和函数
- 利用指针作为函数的参数,可以修改实参的值
#include <iostream>
using namespace std;
void changevalue(int *a)
{
*a = 10;
cout << "形参a值 = " << *a << endl;
}
int main(void)
{
int a = 5;
int* p = &a;
changevalue(p);
cout << "实参a值=" << a << endl;
system("pause");
return 0;
}
void * 指针
特殊的指针类型,可用于存放任意对象的地址
void*的视角:内存空间仅仅是内存空间,无法访问内存空间中所存的对象。
视频:戳这里_B站大学
推荐文章:[C++基础入门](五):函数