首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过使用指针传递函数内部的全局变量是一种好的做法吗?

通过使用指针传递函数内部的全局变量并不是一种好的做法。在函数内部直接访问全局变量可以导致代码的可读性和可维护性降低,增加代码的复杂性和耦合度。

使用指针传递全局变量会破坏封装性,使得函数对全局变量的依赖性增加,难以进行单元测试和模块化开发。同时,如果多个函数都需要访问同一个全局变量,会增加代码的竞争条件和不确定性,可能导致数据不一致或者错误的结果。

相反,推荐的做法是将全局变量作为函数的参数进行传递,或者使用局部变量来处理函数的逻辑。这样可以提高代码的可读性和可维护性,减少代码的耦合度。如果多个函数需要共享某个变量,可以考虑使用类或者结构体来封装相关的数据和操作,以实现更好的封装和抽象。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(SCF):https://cloud.tencent.com/product/scf
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(TPNS):https://cloud.tencent.com/product/tpns
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++仿函数

true : false; } 虽然这个函数看起来比前面一个版本更具有一般性,但是它不能满足已经定义函数指针参数要求,因为函数指针参数类型bool (*)(int),与函数bool IsGreaterThanThreshold...这种方法我们已经讨论过了,多个参数不适用于已定义RecallFunc函数。 (3)全局变量。我们可以将阈值设置成一个全局变量。...上面的实例就是该做法; (2)将该“操作”设计为一个仿函数(就语言层面而言个class),再以该仿函数产生一个对象,并以此对象作为算法一个参数。...正如上面的例子,在我们写代码时有时会发现有些功能代码,会不断地被使用。为了复用这些代码,实现为一个公共函数一个解决方法。不过函数用到一些变量,可能公共全局变量。...STL中也大量涉及到仿函数,有时仿函数使用是为了函数拥有类性质,以达到安全传递函数指针、依据函数生成对象、甚至让函数之间有继承关系、对函数进行运算和操作效果。

3.8K32

c++面试选择题_C语言经典笔试题

(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...描述内存分配方式以及它们区别? 1) 从静态存储区域分配。内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量,static 变量。 2) 在栈上创建。...第28题:内存分配方式有几种? 一、从静态存储区域分配。内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量。 二、在栈上创建。...生命周期不同: 全局变量随主程序创建和创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 使用方式不同:通过声明后全局变量程序各个部分都可以用到;局部变量只能在局部使用...操作系统和编译器通过内存分配位置来知道全局变量分配在全局数据段并且在程序开始运行时候被加载。局部变量则分配在堆栈里面 。

1.1K10
  • C++经典面试题(最全,面中率最高)

    (2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...描述内存分配方式以及它们区别? 1) 从静态存储区域分配。内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量,static 变量。 2) 在栈上创建。...28题:内存分配方式有几种? 【参考答案】 一、从静态存储区域分配。内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量。 二、在栈上创建。...【参考答案】 生命周期不同: 全局变量随主程序创建和创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 使用方式不同:通过声明后全局变量程序各个部分都可以用到;...操作系统和编译器通过内存分配位置来知道全局变量分配在全局数据段并且在程序开始运行时候被加载。局部变量则分配在堆栈里面 。 人一定要靠自己

    1.9K30

    C++中引用详解

    ra=1; 等价于 a=1;    (5)声明一个引用,不是新定义了一个变量,它只表示该引用名目标变量名一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。...(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...(2)用引用传递函数参数,能保证参数传递中不产生副本,提高传递效率,且通过const使用,保证了引用传递安全性。...(3)引用与指针区别是,指针通过某个指针变量指向一个对象后,对它所指向变量间接操作。程序中使用指针,程序可读性差;而引用本身就是目标变量别名,对引用操作就是对目标变量操作。

    1.3K50

    const关键字到底该什么用

    *p等价 *p = 11; //编译错误,指向对象是只读,不可通过p进行改变 p = &b; //合法,改变了p指向 这里为了便于理解,可认为const修饰*p,通常使用*对指针进行解引用来访问对象...const限定类型指针,避免函数内部对数据进行意外地修改。...修饰全局变量 我们知道,使用全局变量一种不安全做法,因为程序任何部分都能够对全局数据进行修改。而如果对全局变量增加const限定符(假设该全局数据不希望被修改),就可以避免被程序其他部分修改。...有兴趣可以尝试一下。 const修饰变量真正只读使用const修饰之后变量真的完全只读?...它修饰变量真正意义上只读?为什么它修饰变量值仍然可以改变?

    58320

    C++引用高级使用

    由上例可以看出: (1)传递引用给函数与传递指针效果一样。...(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...(2)用引用传递函数参数,能保证参数传递中不产生副本,提高传递效率,且通过const使用,保证了引用传递安全性。...(3)引用与指针区别是,指针通过某个指针变量指向一个对象后,对它所指向变量间接操作。程序中使用指针,程序可读性差;而引用本身就是目标变量别名,对引用操作就是对目标变量操作。

    54320

    C语言常用知识没多少之函数讲解

    其类型与变量数据类型一样。但是又多了一种类型,无返回值函数,其英文单词void。函数返回使用return语句实现。...在参数列表中定义参数可以在参数内部使用,并且初始值为调用时实参值,并且一一对应。参数列表变量名与函数内部变量名可以与其它函数变量名一样。函数内部变量称为局部变量。...各个函数都可以调用定义在函数(包括main函数)外部全局变量,但要求该变量定义在函数定义前面。当全局变量名和局部变量名一样时,调用局部变量。...函数体实现函数功能部分,其内容根据自己要实现功能进行编写。自定义函数不仅函数名与函数要执行功能一样或相近,而且函数体代码量简洁、容易等。 函数之间可以相互调用,也可以调用自身。...双引号中格式控制字符要与后面的变量数量相同、对应数据类型一样。省略号表示可以有多个变量同时通过键盘赋值;逗号为非格式控制字符,可以为空格等字符,多个变量分隔标志。

    89720

    Java IAQ:很少被回答问题

    在Properties例子中,很难说契约到底有没有被打破,因为并没有明确指定默认值是否被考虑为table实体。 Q:除了继承,还有其它类似的做法? 委托继承一种替代品。...大多数情况下,我也认为Math m = null 一种糟糕做法,但我不认同MyStaticMethods 例子一种“为了使用可有可无缩写(不如直接用类别层级方式进行表示)而导致缺乏面向对象风格继承做法...以下对激活使用(active use)一些定义,当你第一次进行如下任何一种操作时,就出发了激活使用这个条件: 1、通过调用构造函数创建了一个C实例。...其中一种可行选择使用带有变量初始化内部接口,这虽然不优雅但是一种可行方法。 for(;;) { ... String str = ......Yourdon提到,在C和汇编语言中,字符串或是数组中使用指针一种习惯用法(有人也在C++中这样做),这种说法并没有错,但是其它语言并没有打算这样做,也并不支持。

    61920

    精选 30 个 C++ 面试题(含解析)

    (2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量,static 变量。 2)在栈上创建。...生命周期不同: 全局变量随主程序创建和创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 使用方式不同: 通过声明后全局变量程序各个部分都可以用到;局部变量只能在局部使用...即使你并没有写this指针,编译器在链接时也会加上this,对各成员访问都是通过this。...例如你建立了类多个对象时,在调用类成员函数时,你并不知道具体哪个对象在调用,此时你可以通过查看this指针来查看具体哪个对象在调用。

    1.5K30

    C++面试题汇总 (一)

    (2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...描述内存分配方式以及它们区别? 1) 从静态存储区域分配。内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量,static 变量。   2) 在栈上创建。...题:内存分配方式有几种? 【参考答案】  一、从静态存储区域分配。内存在程序编译时候就已经分配,这块内存在程序整个运行期间都存在。例如全局变量。  二、在栈上创建。...【参考答案】   生命周期不同:  全局变量随主程序创建和创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在;  使用方式不同:通过声明后全局变量程序各个部分都可以用到...操作系统和编译器通过内存分配位置来知道全局变量分配在全局数据段并且在程序开始运行时候被加载。局部变量则分配在堆栈里面 。  二,算法题  实现strcpy.

    88720

    c专题之指针----指针与函数传参和输入、输出型参数

    实际上实参x和y永远无法真身进入子函数内部(进去只能一份拷贝),但是在swap2我们把x和y地址传进去给子函数了,于是乎在子函数内可以通过指针解引用方式从函数内部访问到外部x和y真身,从而改变x...总的来说,函数参数传参用比较多,因为这样可以实现模块化编程,而C语言中也是尽量减少使用全局变量。...(5)全局变量传参最大好处就是省略了函数传参开销,所以效率要高一些;但是实战中用最多还是传参,如果参数很多传参开销非常大,通常做法把很多参数打包成一个结构体,然后传结构体变量指针进去...2、函数传参中使用const指针: (1)const一般用在函数参数列表中,用法const int *p;(意义指针变量p本身可变,而p所指向变量不可变)。...函数传参如果传普通变量(不是指针)那肯定是输入型参数;如果传指针就有2种可能性了,为了区别,经常做法:如果这个参数做输入(通常做输入在函数内部只需要读取这个参数而不会需要更改它)就在指针前面加

    1.6K20

    计算机初级选手成长历程——指针(5)

    进阶指针 导言 大家,很高兴又和大家见面了!!!...: 对于全局变量a来说,不管在test函数内部还是在main函数内部以及if语句代码块内部都是可以正常使用,所以此时我们可以说全局变量a此时使用范围从它创建后任何地方都可以进行使用; 对于局部变量...现在有朋友可能就有疑问了,局部变量出现这种情况我都能理解,此时它是因为出了自己作用域就被销毁了嘛,但是你都说了全局变量跟随整个工程,你这现在不是自己打自己?...因此这个例子再一次证明了局部变量生命周期与作用域都是自己对应代码块内部; 而对全局变量来说,我们可以通过关键字extern对变量进行声明,所以全局变量生命周期和作用域在整个工程内部。...下面针对这两个问题,我们来通过代码测试一下: 从测试结果中我们可以看到,在局部变量a代码块内部打印局部变量a值,而当局部变量被销毁后打印则是全局变量a值,也就是说当局部变量与全局变量变量名相同时

    17110

    C++知识总结

    声明一个引用,不是新定义了一个变量,它只表示该引用名目标变量名一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组引用。 6....(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参变量实参变量副本;如果传递对象,还将调用拷贝构造函数...主要原因局部变量会在函数返回后被销毁,因此被返回引用就成为了"无所指"引用,程序会进入未知状态。 (2)不能返回函数内部new分配内存引用(这个要注意啦,很多人没意识到,哈哈。。。)。...指针一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 4....通过指针变量调用此虚函数,此时调用就是指针变量指向对象同名函数。 通过虚函数与指向基类对象指针变量配合使用,就能方便地调用同一类族中不同类同名函数,只要先用基类指针指向即可。

    1K40

    地址无关码

    一种模块内部函数调用、跳转等; 第二种模块内部数据访问,比如模块中定义全局变量、静态变量。 第三种模块外部函数调用、跳转等。...第四种模块外部数据访问,比如其他模块中定义全局变量。 类型一 模块内部调用或跳转等 这4种情况中,第一种类型应该是最简单,那就是模块内部调用。...ELF做法在数据段里面建立一个指向这些变量指针数组,也被称为全局偏移表(G| obal Offset Table,GOT),当代码需要引用该全局变量时,可以通过GOT中相对应项间接引用,它基本机制如图...我们上面的情况中没有包含定义在模块内部全局变量情况。可能你第一反应就是,这不是很简单?跟模块内部静态变量一样处理不就可以了吗?...的确,粗略一看模块内部全局变量和静态变量地址都可以通过上面所列出类型两种方法来解决。但是有一种情况很特殊,我们来看看 会产生什么问题。

    1K20

    Golang 面试题

    大家,又见面了,我你们朋友全栈君。 本文章收录于:后端工程师面试题目总结(提供参考答案) 目录 1. make与new区别 2. 简要描述go中main和init函数区别 3....,将关于函数一切封闭到了函数内部,减少了全局变量。...使用场景: 每次调用函数A时都要改变全局变量B,且B只与A相关,以往没有闭包时只能将B定义为全局变量;而现在可以将B定义为A内部变量,将真正执行函数作为闭包放在A内部去执行。...因为当map扩容时,内部元素会在内存中移动, 移动之后list[“name”].Name获取到值依然有效,但获取到指针无效,如果允许这样赋值,那之后再打印list[“name”].Name 获取不到修改后...而当value指针时,也就是说list[“name”]指针,list[“name”].Name就是指针内部指针,值改变后,list[“name”]仍然获取到原始数据指针,也就仍然可以获取到list

    54620

    【本周主题】第三期 - JavaScript 内存机制

    拷贝这些类型数据就是拷贝一个副本 以及: Object、Array、Function等引用类型指针。 拷贝这些类型数据拷贝了指针一个副本,新指针和原指针还是指向堆内存里同一个地址。...这种做法,在js中有些方法组合使用就是了: push + pop:从最后边依次推进去,再从最后边拿。上边1就是push(),2就是pop()做法了。...比如这里js文件中只有一行代码: var a = [123,2]; 你说a有引用? 我第一感觉没有的,但是看阮一峰大神讲解,这里还有引用。 数组还在占用内存,变量a一个引用。...另外,如果不是使用构造函数,普通函数内部也记得使用this时候,js文件头部加上"use strict"字样,表示使用严格模式编译。...此做法适用于全局变量和全局对象属性。因为局部变量大多会在他们离开执行环境时自动被解除引用。  其他对照第六点中对应情况寻找对应解决方法吧。

    67520

    Go语言结构体多字段赋值并发安全

    其实可以先在局部环境设置 Person 结构体,然后一把原子赋值给全局变量即可。Go 提供了 atomic.Value 这个类型。 怎么改造?...p.Store(lp) } 最后 main 函数读取全局变量打印地方,需要使用原子 Load 方式: // 结果啥?...Store 内部并不是保证多字段原子拷贝!!!!Store 里面处理个结构体指针。 只通过了 StorePointer 保证了指针原子赋值操作。 我天?这样?那何来原子操作。...总结 interface {} ,eface ,ifaceWords 本质一个东西,同一种内存三种类型解释,用在不同层面和场景。...它们可以通过强制类型转化进行切换; atomic.Value 使用 cas 操作只在初始赋值时候,一旦赋值过,后续赋值原子操作更简单,依赖于 StorePointer ,指针值得原子赋值; atomic.Value

    2.9K20

    总结了一些指针易出错常见问题(一)

    简介:计算机如何从内存单元中存取数据呢?从程序设计角度看,有两种办法:一通过变量名;二通过地址。...由于通过地址能访问指定内存存储单元,因此可以说,地址“指向”该内存存储单元(如同说,房间号“指向”某一房间一样)。故将地址形象化地称为“指针”,意思通过它能找到以它为地址内存单元。...指针变量就是具有指针类型变量,它是用于存放内存单元地址通过变量名访问一个变量直接,而通过指针访问一个变量间接。...所有函数都能访问全局变量,静态变量作用域则局限在定义它们函数内部。     ...一种方法就是把指针(强制)转化为void指针,然后用%p/%o/%x格式说明符来显示。

    86290
    领券