当前位置: 首页 > 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.mrgr.cn/news/36671.html

相关文章:

  • 力扣(LeetCode)每日一题 2535. 数组元素和与数字和的绝对差
  • svn add代码时,忽略node_modules
  • 江科大笔记——新建工程
  • 代码随想录算法训练营第55天 | 寻找存在的路径
  • 大数据毕业设计选题推荐-租房数据分析系统-Hive-Hadoop-Spark
  • 浅谈C++之线程管理
  • 神经网络(五):U2Net图像分割网络
  • CSP-J 2024 入门级 第一轮(初赛) 阅读程序(1)
  • 【高阶数据结构】平衡二叉树(AVL)的插入(4种旋转方法+精美图解+完整代码)
  • PHP实现的纵横四海程序
  • 神经网络(四):UNet图像分割网络
  • 你了解文档透明加密系统吗?介绍7款顶尖文档透明加密软件,热门推荐!
  • Linux系统sersync数据实时同步
  • How to batch wise grad
  • Go语言匿名字段使用与注意事项
  • 跨地域协作新篇章:异地传输文件的最优方案
  • 步进电机认识
  • Linux必学知识点:单独编译、烧写构建某个镜像,打包Linux系统镜像
  • 主流数据库与最佳备份工具选择
  • 一篇带你搞定数据结构散列表