当前位置: 首页 > news >正文

浅谈C++之指针

一、基本介绍

        在C++中,指针是一种复杂的数据类型,它存储了另一个变量的内存地址。通过指针,程序可以直接访问和操作内存,这为编程提供了极大的灵活性和效率,但同时也增加了复杂性和潜在的错误风险。

二、指针的概念

指针变量:存储另一个变量的内存地址。

地址:内存中每个字节都有一个唯一的地址。

引用:通过指针访问或操作存储在内存地址上的数据。

三、指针的声明

指针的声明需要指定指针的类型和所指向的变量的类型。

int *ptr; // ptr是指向int类型的指针
double *dptr; // dptr是指向double类型的指针
char *cptr; // cptr是指向char类型的指针

指针的初始化

指针变量必须被初始化,否则它将包含一个随机的内存地址。

int var = 10;
int *ptr = &var; // ptr现在指向var的地址

指针的解引用

使用*操作符来解引用指针,获取指针指向的值。

int var = 10;
int *ptr = &var;
int value = *ptr; // value现在是10

指针的算术运算

指针可以进行加法和减法运算,但这些运算通常用于数组。

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
int value = *(ptr + 2); // value是3,即arr[2]

指针与数组

数组名在大多数情况下被解释为指向数组首元素的指针。

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // ptr指向数组的第一个元素

指针与函数

指针可以用于函数参数和返回值,以实现对数据的直接访问。

传递指针到函数

void increment(int *ptr) {(*ptr)++;
}int main() {int value = 5;increment(&value);std::cout << value; // 输出6return 0;
}

从函数返回指针

int* create_int(int val) {int *ptr = new int;*ptr = val;return ptr;
}int main() {int *my_int = create_int(10);std::cout << *my_int; // 输出10delete my_int; // 释放内存return 0;
}

指针与动态内存分配

使用newdelete操作符来动态分配和释放内存。

int *ptr = new int; // 分配一个int大小的内存
*ptr = 10;
std::cout << *ptr; // 输出10
delete ptr; // 释放内存

指针的指针

指针的指针是指向另一个指针的指针

int var = 10;
int *ptr = &var;
int **pptr = &ptr;

空指针

在C++11中,可以使用nullptr来表示空指针。

int *ptr = nullptr;

指针类型转换

使用static_castreinterpret_cast来进行指针类型转换。

int *ip;
double *dp = static_cast<double*>(ip); // 错误的转换,但语法上是允许的

http://www.lryc.cn/news/446507.html

相关文章:

  • 在虚幻引擎中实时显示帧率
  • Apache Iceberg构建高性能数据湖
  • 【图像压缩与重构】基于标准+改进BP神经网络
  • 函数式编程(以Python编程语言为例)介绍
  • 银河麒麟操作系统中查看动态库函数的方法
  • 开放麒麟openkylin
  • 用Python与OpenCV的实践:实时面部对称性分析
  • 第三十三章 使用派生密钥令牌进行加密和签名 - 使用 DerivedKeyToken _进行加密(一)
  • Structure-Aware Transformer for Graph Representation Learning
  • 滚动页面,el-table表头始终置顶
  • Mac使用gradle编译springboot-2.7.x源码
  • MySQL --索引(下)
  • 选择寄宿学校,给自闭症孩子一个温暖的第二家
  • 大模型训练:K8s 环境中数千节点存储最佳实践
  • 【Linux学习】1-2 新建虚拟机ubuntu环境
  • ftdi_sio驱动学习笔记 3 - 端口操作
  • [leetcode]39_组合总和_给定数组且数组可重复
  • 【笔记】第三节 组织与性能
  • 数据库——sql语言学习 查找语句
  • 【计算机网络 - 基础问题】每日 3 题(二十三)
  • JPA + Thymeleaf 增删改查
  • Android常用C++特性之std::this_thread
  • 成语700词(31~45组)
  • vue3组件通信(组合式API)
  • 从预测性维护到智能物流:ARM边缘计算控制器的工业实践
  • 2024年汉字小达人区级自由报名备考冲刺:最新问题和官模题练一练
  • Linux相关概念和重要知识点(8)(操作系统、进程的概念)
  • 测序技术--组蛋白甲基化修饰、DNA亲和纯化测序,教授(优青)团队指导:从实验设计、结果分析到SCI论文辅助
  • Llama 3.2来了,多模态且开源!AR眼镜黄仁勋首批体验,Quest 3S头显价格低到离谱
  • 软考高级:SOA 和微服务 AI 解读