问题标签 [pointers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
704 浏览

c++ - 何时通过引用传递函数参数,何时通过地址传递?

谁能用一些例子来解释什么时候通过引用调用函数更好,什么时候通过地址调用更好?

0 投票
10 回答
30218 浏览

c++ - 在特定对象实例上调用 C++ 函数指针

我有一个由以下定义的函数指针:

有没有办法使用 C++ 对象的特定实例来处理该函数?

编辑: Orion 指出了 Boost 提供的选项,例如:

不幸的是,Boost 对我来说不是一个选择。是否有某种可以用 C++ 编写的“currying”函数,它将指向成员函数的指针包装到普通函数指针中?

0 投票
5 回答
2127 浏览

programming-languages - 什么是指针?

请参阅:了解指针


在许多 C 风格的语言和一些较旧的语言(如 Fortran)中,可以使用Pointers

作为一个只真正使用基本、javascript 和 actionscript 编程的人,你能向我解释一下指针是什么,它最有用的是什么?

谢谢!

0 投票
17 回答
311642 浏览

c++ - 为什么要使用指针?

我知道这是一个非常基本的问题,但是在使用高级语言编写了一些项目之后,我才刚刚开始进行一些基本的 C++ 编程。

基本上我有三个问题:

  1. 为什么在普通变量上使用指针?
  2. 我应该何时何地使用指针?
  3. 如何在数组中使用指针?
0 投票
6 回答
1391 浏览

c++ - 类中带有指针的垃圾,C++

我正在使用 Borland Builder C++。我有内存泄漏,我知道这一定是因为我创建了这个类,但我不知道如何修复它。请查看我的代码——任何想法将不胜感激!

这是.h文件:

这是一些 .cpp 文件:

现在,当我在 main 中使用该类时,基本上我只是创建了一个指针:

其中corners->location 是另一个类的字符串,t[5] 和 t[6] 都是字符串。问题是 imageLocation 不包含预期的内容,而且通常只是垃圾。我已经阅读了很多关于内存泄漏和指针的内容,但我对编程仍然很陌生,其中一些内容相当混乱。任何建议都会很棒!

0 投票
8 回答
10242 浏览

c++ - void* 指针的 C++ 替代方案(不是模板)

看来我对 C++ 有一个根本的误解:<

我喜欢多态容器解决方案。谢谢你,让我注意到这一点:)


所以,我们需要创建一个相对通用的容器类型对象。它也恰好封装了一些业务相关的逻辑。然而,我们需要在这个容器中存储基本上任意的数据——从原始数据类型到复杂类的所有内容。

因此,人们会立即跳到模板类的想法并完成它。但是,我注意到 C++ 多态性和模板不能很好地协同工作。由于有一些复杂的逻辑我们将不得不工作,我宁愿只使用模板或多态性,而不是试图通过使其两者兼而有之来对抗 C++。

最后,鉴于我想做一个或另一个,我更喜欢多态性。我发现表示“这个容器包含 Comparable 类型”之类的约束要容易得多 - 一个 la java.lang.

把我带到问题的话题:最抽象的,我想我可以有一个“容器”纯虚拟接口,类似于“push(void * data)和pop(void * data)”(记录在案) ,我实际上并没有尝试实现堆栈)。

但是,我真的不喜欢顶层的 void*,更不用说每次我想为具体容器可以使用的数据类型添加约束时签名都会发生变化。

总结:我们有相对复杂的容器,有各种方法来检索元素。我们希望能够改变对可以进入容器的元素的约束。元素应该与多种容器一起使用(只要它们满足特定容器的约束)。

编辑:我还应该提到容器本身需要是多态的。这是我不想使用模板化 C++ 的主要原因。

那么 - 我应该放弃对 Java 类型接口的热爱并使用模板吗?我应该使用 void* 并静态转换所有内容吗?或者我应该使用一个空的类定义“元素”,它什么都不声明,并将其用作“元素”层次结构中的顶级类?

我喜欢堆栈溢出的原因之一是,许多回复提供了一些我从未考虑过的其他方法的有趣见解。因此,提前感谢您的见解和评论。

0 投票
2 回答
13062 浏览

delphi - 如何在Delphi中将对象方法作为参数传递,然后调用它?

我担心这可能是一个有点愚蠢的问题,但它让我很困惑。

我正在寻找将对象的方法传递给过程的最简单方法,以便过程可以调用对象的方法(例如,在超时之后,或者可能在不同的线程中)。所以基本上我想:

  • 捕获对对象方法的引用。
  • 将该引用传递给一个过程。
  • 使用该引用,从过程中调用对象的方法。

我想我可以使用接口实现相同的效果,但我认为还有另一种方法,因为存在这种“对象过程”类型声明。

以下内容不起作用,但它可能有助于解释我在哪里感到困惑......?

(一旦问题得到回答,我将删除上面的代码,除非它以某种方式有助于解释。)

0 投票
13 回答
39566 浏览

c++ - 在指针声明中放置星号

我最近决定我只需要最终学习 C/C++,关于指针,或者更准确地说,它们的定义,我并不真正了解一件事。

这些例子怎么样:

  1. int* test;
  2. int *test;
  3. int * test;
  4. int* test,test2;
  5. int *test,test2;
  6. int * test,test2;

现在,据我了解,前三种情况都在做同样的事情:Test 不是一个 int,而是一个指向 int 的指针。

第二组示例有点棘手。在案例 4 中,test 和 test2 都是指向 int 的指针,而在案例 5 中,只有 test 是指针,而 test2 是“真正的”int。案例6呢?和案例5一样吗?

0 投票
7 回答
23721 浏览

c - 函数指针转换为不同的签名

我使用函数指针的结构来实现不同后端的接口。签名非常不同,但返回值几乎都是 void、void * 或 int。

但并不要求后端支持每个接口函数的函数。所以我有两种可能性,第一种选择是在每次调用之前检查指针是否不等于 NULL。我不太喜欢这样,因为它的可读性和我担心性能影响(但是我没有测量它)。另一种选择是有一个虚拟函数,在极少数情况下接口函数不存在。

因此,每个签名都需要一个虚拟函数,我想知道是否有可能只有一个用于不同的返回值。并将其转换为给定的签名。

我用 gcc 测试了这段代码,它可以工作。但它是理智的吗?或者它会破坏堆栈还是会导致其他问题?

编辑:感谢所有答案,经过进一步阅读,我现在学到了很多关于调用约定的知识。现在对幕后发生的事情有了更好的了解。

0 投票
8 回答
1611 浏览

c++ - func(int ¶m) 和 func(int *param) 有什么区别?

在下面的代码中,两者amp_swap()似乎star_swap()都在做同样的事情。那么为什么有人会更喜欢使用其中一种呢?哪一个是首选符号,为什么?还是只是口味问题?

谢谢你的时间!


也可以看看

C++中指针变量和引用变量的区别