目录
基本指针声明1
int* p; // 声明一个指向int的指针
基本指针声明2
int *p; // 声明一个指向int的指针
基本指针声明3
这里为了兼容C版本
int p*; // 声明一个指向int的指针
指针初始化
int a = 10;
int* p = &a; // p指向变量a的地址
使用const限定指针
指向常量的指针(指针指向的值不可变)
const int* p = &a; // p指向的值不可修改
指针常量(指针本身的值不可变)
int* const p = &a; // p的指向不可改变,但可以修改p指向的值
指针的指针
int a = 10;
int* p = &a;
int** pp = &p; // pp是指向指针p的指针
数组和指针
int arr[5] = {1, 2, 3, 4, 5};
int* p = arr; // p指向数组的第一个元素
函数指针
void func(int a) {}
void (*fp)(int) = func; // fp是指向func的函数指针
C++引用作为指针
C++中的引用实际上是一种特殊的指针,它们在声明时被初始化,并且不能重新赋值。
int a = 10;
int& ref = a; // ref是对a的引用
指针数组
int* arr[5]; // 一个包含5个int指针的数组
指针的地址
int a = 10;
int* p = &a;
int*& p_ref = p; // p_ref是对p的引用,即p的地址的引用
指针和new操作符
int* p = new int; // 在堆上分配一个int空间
指针和delete操作符
delete p; // 释放p指向的堆上空间
智能指针(C++11及以后)
std::unique_ptr、std::shared_ptr、std::weak_ptr等,用于自动管理内存。
#include <memory>
std::unique_ptr<int> uniquePtr(new int); // 自动管理一个int的生命周期
指针的指针的指针...(多级指针)
int a = 10;
int* p = &a;
int** pp = &p;
int*** ppp = &pp; // ppp指向pp,pp指向p,p指向a
指针类型转换
void* vp = &a; // 将int*转换为void*
int* p = static_cast<int*>(vp); // 将void*转换回int*
(到底啦)