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

指针的工作原理,函数的传值和传址

在C++之中,指针是一个变量用于存储另外一个变量的内存地址。指针可以指向各种数据类型例如基础数据类型和自定义数据类型等。

在计算机之中的内存被划分为一个一个的存储单元,每个存储单元拥有唯一的内存地址,指针就是指向这些内存单元的地址。

指针的声明:

可以使用*ptr对指针进行解引用,解引用之后输出的结果是指针指向的对象的值。

指针可以参与加减运算,例如:

在这个例子之中,数组名在一般情况下会隐式转换为指向数组首元素的指针。

输出的结果是:1,2

函数的传值:是指将实参的值传递给函数的形参,并且不改变实参原来的值,例如:

函数的传址,则是将实参的地址传递给函数的形参,由于指向的是同一个内存空间,所以在函数之中对形参进行修改也会修改函数实参的值,例如:

//函数传指针(传址)
#include<iostream>
using namespace std;
void func(int* num){
    *num+=10;
    cout<<"经过函数的操作,num的值为:"<<*num<<endl;
}
int main(){
    int value=10;
    func(&value);
    cout<<"经过函数的操作,value的值为:"<<value<<endl;
    return 0;
}

另外,通过传引用也能达到这种效果达到效果:

老规矩,我们开始思考C#与C++的区别,在C#之中虽然也可以使用指针,但是一般使用指针是函数处于一种不安全的模式之下,所以我们一般不考虑C#的指针使用。

对于函数的传值,C#之中也是将实参的值传递给形参,并且对函数之中的形参进行操作不会影响实参的值,这一点和C++相同。

对于函数的传址,在C++之中,是通过传递指针,这样形参和实参都是修改同一个内存地址所以形参的改变也会影响实参。在C#之中我们使用ref和out进行这部分的操作,使得形参的改变会影响到实参的改变。

但是在C#之中使用ref 和out对实参的修改比在C++之中使用传址的方式更加安全,由于在使用ref和out的时候,编译器会对这部分进行检查,相对来说比较安全,但是C++之中如果操作不当,就会出现悬空指针的情况,所以使用C++进行传址的操作时需要小心。

相关文章:

  • 第6届传智杯复赛第一场
  • 代码随想录算法训练营第三十二天(20250228) |509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯 -[补卡20250309]
  • ES Module 的 import 导入和 import () 动态导入
  • Blueprint —— Blueprint Editor(二)
  • 牛客周赛A:84:JAVA
  • 【移动WEB开发】rem适配布局
  • 【Kotlin】Kotlin基础笔记
  • 用python 的 sentiment intensity analyzer的情感分析器,将用户评论进行分类
  • HPC超算系列4——官方指南文档
  • Dify使用日常:我是如何按标题级别将word中的内容转存到excel中的
  • ESP32驱动OV3660摄像头实现EdgeImpulse图像识别(摄像头支持红外夜视、边缘AI计算)
  • 【AI】什么是Embedding向量模型?我们应该如何选择?
  • 论文不能抄要怎么写啊?
  • 网络空间安全(21)验证码安全
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(二)
  • 【机器学习和深度学习】分类问题通用评价指标:精确率、召回率、准确率和混淆矩阵
  • es-初体验easy-es时报错:找不到mapper
  • 使用 Docker 部署 Nginx,配置后端 API 轮询与多个子域名前端应用
  • Java中局部变量、实例变量和静态变量的运行时数据区域
  • 云效、流水线、Gradle缓存问题、build.gradle配置snapshot
  • 淄博定制网站建设公司/各大网站域名大全
  • 免费软件无线看破解版/烟台seo
  • 关于网站建设 策划文案/建站快车
  • 双语 网站 数据怎么做/windows优化大师最新版本
  • 信阳做房产哪个网站好用/中国工商业联合会
  • 分销联盟推广开放平台/沈阳网站seo排名公司