草庐IT

$双指针

全部标签

c++ - 我可以在不使用原始指针的情况下避免在 std::initializer_list 初始化期间进行复制吗?

假设我有几个在本地声明的对象,我想使用基于范围的for语法对其进行迭代。这似乎运作良好,但是,似乎要将本地对象放入initializer_list,执行复制。这对于像std::shared_ptr这样的对象来说是个坏消息,据我所知,增加引用计数是一个原子操作。我认为可以避免这种情况的唯一方法是使用原始指针。#include#includeintmain(){std::shared_ptrptrInt1=std::make_shared(1);std::shared_ptrptrInt2=std::make_shared(2);/*inthisloop,ptrInt1andptrInt2

c++ - 指向同一地址的指针彼此不同

我最近对指针感到好奇,但我无法理解为什么以下内容不起作用。我的想法是创建一个变量,比如它的地址(十进制),要求用户将其输入回去并将其作为指向前一个变量的指针的地址。最后两个变量应该具有相同的值。据推测,最后一个指针指向一个错误的内存地址,因为它会出现段错误,但是当我打印指针的地址时,它们是相同的!#includeintmain(){inttemp=0;printf("Temporaryintegeraddr0x%x(dec%d)\n",&temp,&temp);intinput=-1;printf("Givemeanaddresstoread(indec)\n");std::cin>>

C语言第二十一弹---指针(五)

✨个人主页: 熬夜学编程的小林💗系列专栏: 【C语言详解】 【数据结构详解】转移表 1、转移表总结 1、转移表函数指针数组的用途:转移表举例:计算器的⼀般实现:假设我们需要做一个能够进行加减乘除两个数的计算器,输入1为加法,2为减法,3为乘法,4为除法,0为退出程序,输入其他值则需要重新输入。1、根据上述要求我们可知,只有输入0才退出程序,因此需要一个循环来控制输入,而且一定会执行一次程序,所以dowhile循环在此处比较合适,进入循环的条件就是输入的值,如果不为0则循环,为0则结束循环。2、知道用dowhile循环之后,首先我们需要一个界面展示输入数字所对应的功能,因此可以写一个菜单的函数,

C语言第十八弹---指针(二)

✨个人主页: 熬夜学编程的小林💗系列专栏: 【C语言详解】 【数据结构详解】指针1、const修饰指针1.1、const修饰变量1.2、const修饰指针变量2、指针运算2.1、指针+-整数2.2、指针-指针2.3、指针的关系运算3、野指针3.1、野指针成因3.2、如何规避野指针3.2.1、指针初始化3.2.2、小心指针越界3.2.3、指针变量不再使用时,及时置NULL,指针使用之前检查有效性3.2.4、避免返回局部变量的地址4、assert断言5、指针的使用和传址调用5.1、strlen的模拟实现5.2、传值调用和传址调用总结1、const修饰指针1.1、const修饰变量变量是可以修改的,

c++ - "cannot convert ' 这个从 'const hand' 到 'hand &' 的指针是什么意思? (C++)

当我尝试这样做时出现错误friendstd::ostream&operatorhand是我创建的类,show是std::ostream&hand::show(std::ostream&os,consthand&obj){returnos其中display声明为chardisplay[6]。有人知道这个错误是什么意思吗? 最佳答案 你需要让hand::show(...)成为一个const方法;向它传递obj引用是没有意义的——它已经将其作为“this”指针接收。这应该有效:classhand{public:std::ostream&s

c++ - 将指针转换为子类 (C++)

我正在开发一款游戏,我需要找到一种方法来获取游戏中某个“mapblock”的值(字符格式)。我有一个处理所有Sprite的DisplayableObject类,以及一个处理播放器对象的子类ThreeDCubePlayer。为了便于渲染/更新所有内容,所有DisplayableObject都存储在一个数组中,第0个单元包含播放器(类型为ThreeDCubePlayer)。ThreeDCubePlayer具有与DisplayableObject不同的构造函数(它需要两个额外的参数)并且只有ThreeDCubePlayer具有我需要的GetMap()函数。所以,这是我到目前为止所做的:Thr

c++ - 指针分配与正常声明

有时我会在各种C++程序中看到对象的声明和使用方式如下:object*obj=newobject;obj->action();obj->moreAction();//etc...这样做有什么好处,而不是简单地做:objectobj;obj.action();obj.moreAction();//etc 最佳答案 是的-您可以将指针存储在容器中或从函数中返回它,并且当指针超出范围时对象不会被销毁。使用指针避免不必要的对象复制,促进可选对象的创建,用于自定义对象生命周期管理,用于创建复杂的图形结构,对于上述的组合。这不是免费的——当你不

c++ - 这个指针的使用

我有一个关于“this”的用法的问题。假设我有两个类A和B;它们的大致轮廓如下:classA{public:...voidAddB(B*b){//insertsBintothevectorv}private:std::vectorv;};classB{public:...voidfoo(void){...//AddsitselftothequeueheldinAa.AddB(this);}};以这种方式使用“this”通常是不好的做法吗?感谢您的帮助。 最佳答案 不,只要您在所有权和删除方面小心谨慎,这没有任何问题。

c++ - 如何将指向成员函数的指针传递给 C 函数?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:UsingaC++classmemberfunctionasaCcallbackfunction我正在使用C库(winpcap)编写面向对象的库。我需要将网络数据包到达时调用的回调函数作为函数指针传递。我想将一个成员函数指针传递给winpcap,以保持我的设计面向对象并允许不同的对象接收不同的数据包。然而,据我所知,成员函数有不同的调用约定,因此不能传递给C函数。有没有办法来解决这个问题。我对boost::bind的实验(除了反复试验,我几乎无法使用它)没有成果。有没有办法改变成员函数的调用约定?这是我现在使

c++ - 为什么指针分配的内存在函数之后仍然存在,而不是数组?

所以,我在C++书中看到的基本文本输入函数的上下文中问这个问题:char*getString(){chartemp[80];cin>>temp;char*pn=newchar[strlen(temp+1)];strcpy(pn,temp);returnpn;}因此temp声明了一个包含80个字符的数组,这是一个自动变量,一旦getString()返回,其内存将被释放。有人建议,如果您出于某种原因返回temp,它在函数外部的使用将不可靠,因为一旦函数完成,该内存就会被释放。但是由于我也在相同的上下文中声明了pn,为什么它的内存没有被丢弃呢? 最佳答案