草庐IT

Pointers

全部标签

c++ - 关于 C++ 指针和引用,需要澄清

请问下列哪项是错误的?据我了解,指针表示某种类型的地址。所以,inti=18,指向它的指针是int*pI=&i;下面两个声明是有效的voidfoo(int&something)//Willacceptanaddressofsomethingvoidbar(int*something)//Willacceptapointertosomething当我们声明一个函数为voidbar(int*something)我们最好发送一个指向某物的指针。事实上,foo(pI)有效。按照同样的逻辑,看的时候voidfoo(int&something)我们应该向它发送一个指向int的地址作为参数,那么:为

通过单个函数使用2Pointers的总和和两个数字的差异

主函数应具有函数调用,例如adddiff(&p,&q)...函数定义就像voidadddiff(*a,*b),它应该同时执行加法和减法,它不应返回值,也不应不应在AddDiff方法中使用打印语句。看答案这两个参数均通过引用传递,因此您可以使用它们将结果“返回”到主函数。但是,请记住要在本地保存其价值,然后再覆盖它们!voidadddiff(int*a,int*b){intorig_a=*a;intorig_b=*b;*a=orig_a+orig_b;*b=orig_a-orig_b;}

c++ - 自动生成的 move 构造函数导致非法行为

我问aquestionaboutmoveconstructors,但我尚未接受答案,因为即使在我开始对其他方面有所了解时,我对问题的某些方面也感到更加困惑。特别是,我发现了一个令人惊讶的情况,其中g++和clang++都生成不正确的move-constructor。问题总结g++和clang++显然违反了以下规则:明确定义析构函数时,不生成move-constructors。为什么?这是一个错误,还是我误会发生了什么?为了正确起见,这些(可能是非法的)move构造函数应使RHS指针成员无效,但它们不会无效。为什么不?看来,避免不良行为的唯一方法是为每个在其析构函数中使用delete的类

c++ - 如果我在 C++ 中将(指向类 A 的指针)转换为(指向其子类 B 的指针)会发生什么

A有一个静态函数A::create(),它创建A的一个实例,进行一些初始化,并返回指向它的指针。我想创建A的子类并具有类似的create()函数:classB:publicA{public:staticB*create();intval;//...}在这个B::create()函数中,我必须执行以下操作:B*B::create(){autob=(B*)A::create();b->val=0;//...returnb;}这是正确的做法吗?类型转换之后会发生什么?追问:A有protected/private的构造函数,B::create(),B的构造函数应该怎么写?我确实希望从A继承的变

c++ - 使用指针作为容器迭代器是否违反标准

Angewmadeacommentvector使用原始指针作为迭代器类型很好。这让我大吃一惊。我开始研究它,发现对vector迭代器的要求只是它们是"RandomAccessIterators"明确指出指针符合条件:Apointertoanelementofanarraysatisfiesallrequirements编译器甚至为vector提供迭代器以进行调试的唯一原因,还是实际上我错过了vector的要求? 最佳答案 §24.2.1Sinceiteratorsareanabstractionofpointers,theirsem

c++ - 二叉树的智能指针

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion如果我有一个二叉树,其中每个节点只包含指向子节点的指针,那么unique_ptr就可以很好地工作。如果我希望每个节点都有一个父指针,那么情况就不太好了,因为一个节点可能有三个指向它的指针:BinaryTreewithparentpointer在这种情况下我能做什么?我可以对所有内容使用shared_ptr,但有人告诉我这不是一个好的设计,因为我可能会得到循环。如果我要使用weak_ptr作为父指针,我应该

c++ - 难以理解 C++ 指针语法

我无法理解我在面试中遇到的这段代码声明。int(*(*ptr[3])(char*))[2];我试过查看一个IDE,但我所拥有的只是它是一个数据类型的数组int(*(*[3])(char*))我无法理解这一点。 最佳答案 或许您可以一次分解一个,以便更好地理解语法。首先从一个没有数组符号的简单定义开始int(*(*ptr)(char*));所以ptr是一个函数指针,它接受一个char指针作为参数并返回一个指向int的指针。现在将其扩展为数组表示法int(*(*ptr[3])(char*))[2];这意味着您有一个函数指针数组,每个函数

c++ - 如何将Lua变量直接映射到C++变量?

我正在使用C++开发一个游戏引擎,使用Lua来定义NPC。我可以这样定义一个原型(prototype)NPC:orc={name="GenericOrc",health=100}functionorc:onIdle()print("Orcidles...")end然后使用entitySpawn(orc)生成一个“Orc”实例。这是一个C++函数,它从给定的表中读取健康和名称等值,用给定的值在C++中创建一个实体对象,此外还为特定的NPC创建一个Lua表。现在,我想直接连接Lua中的orc.health变量和C++中对应的Entity对象的mHealth成员变量,所以我可以在Lua中分配

c++ - 使用引用而不是指针有哪些缺点?

给定“A”类存在并且是正确的。使用对“A”的引用而不是类“B”中的指针会产生一些负面结果。即://InDeclarationFileclassA;classB{public:B();~B();private:A&a;};//InDefinitionFileB::B():a(*newA()){}B::~B(){delete&a;}为了进一步正确“B”省略了额外的代码,例如复制构造函数和赋值运算符,只是想演示问题的概念。 最佳答案 直接的限制是:您不能更改引用的值。您可以更改A它指的是,但您不能重新分配或重新分配a在B期间的一生。a绝不

c++ - 用指针反转字符串 C++

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhydoIgetasegmentationfaultwhenwritingtoastring?我想写一个简单的C++函数来反转string/char[]仅通过指针运算。我理解这个概念并且已经输入了代码。我有以下.cpp文件:#includeusingstd::cout;usingstd::endl;voidreverse(char*target)//Requirementsspecifytohavethisargument{cout1)//Checkincasenowordor1letterwordispl