变量地址
int a;
std::cout<<"变量地址:"<< &a <<std::endl;
指针作用
int a;
int *p=&a; //指针存放变量的地址
64位指针变量占用 8
32位指针变量占用 4
指针使用
指针变量在使用之前必须要初始化赋值;
c11+
int *p = nullptr;
早期
int *p=NULL;
指针解引用
int a =1;
int *p=&a;
std::cout << "*p解引用的值"<<*p<<std::endl;
指针参数
// 修改变量的值通过指针参数
void modifyValue(int* ptr) {
*ptr = 42; // 修改指针指向的变量的值
}
int main() {
int x = 10;
modifyValue(&x); // 传递 x 的地址
}
解决内存拷贝
常量指针
const int* ptr; // 常量指针,不能通过 ptr 修改指向的内容,但可以修改 ptr 指向其他地方
形参的值不需要修改 建议加上const
指针常量
int x = 10;
int* const ptr = &x; // 指针常量,不能修改 ptr 的值(地址),但可以通过 ptr 修改 x 的值
在定义的同时必须初始化,可以通过解引用的方法修改内存地址中的值。
这种形式可以叫做引用
常量指针常量
#include <iostream>
int main() {
int x = 10;
int y = 20;
const int* const ptr = &x; // 常量指针常量,不能修改指针的指向和指向的内容
std::cout << *ptr << std::endl; // 通过 ptr 读取 x 的值
// ptr = &y; // 错误,不能修改指针的指向
// *ptr = 30; // 错误,不能修改指针指向的内容
return 0;
}
常量指针常量的特点是既保护了指针的指向,也保护了指针指向的内容,从而提供了更高的安全性和严格性。它适用于需要确保指针和所指向数据都不被修改的场景,可以帮助预防意外的数据变化。
void指针参数
无类型指针,表示接收任意数据类型的指针。
// 转成16键值
int *a=10;
(void *)&a