问题标签 [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 投票
1 回答
3731 浏览

c++ - 您可以在 C++ 中将指针声明为 extern 吗?

我有以下无法编译的遗留 C++ 代码:

GCC(g++)抱怨:“'*'令牌之前的预期初始化程序”

环顾四周,将这些声明为外部引用似乎更常见,如下所示:

为什么指针无效,但引用在这种情况下?

解决方案:

如下所述,真正的问题是缺少 std:: 命名空间说明符。显然,这在较旧的 C++ 代码中很常见。

0 投票
5 回答
5561 浏览

pointers - 引用与指针的执行速度

我最近阅读了关于托管语言是否比本地语言(特别是 C# 与 C++)慢(或快)的讨论。一位参与讨论的人说,托管语言的 JIT 编译器将能够对引用进行优化,这在使用指针的语言中是不可能的。

我想知道的是在引用而不是指针上可以进行什么样的优化?

请注意,讨论是关于执行速度,而不是内存使用。

0 投票
8 回答
4018 浏览

c++ - 带有标准输入的 C++ 字符数组

我正在尝试获取由 stdin 填充的数组的大小:

当我输入一个长度大于 4 的字符串时返回 4,例如“40905898”

我哪里错了?

0 投票
5 回答
951 浏览

c++ - C++ 中指针类型的意义何在?

假设我有一些指针称为:

我知道它们都只是保存指向其他位置的内存地址,并且类型声明了特定指针指向的内存位置有多大。例如,一个 char 可能是系统上一个字节的大小,而一个 int 可能是 4 个字节。所以当我这样做时:

但是,如果我这样做:

谢谢..希望在这里得到任何澄清..指针类型是否仅用于 ++ 操作?

编辑:所以 avp 恰当地回答了我的问题,但我有一个后续问题,当我这样做时会发生什么:

它会复制2个字节吗?还是4个字节?我会有访问冲突吗?

编辑:根据 Ryan Fox 的说法,答案是 2 个字节,因为它们被强制转换为 (void*)。谢谢!关闭!

编辑:只是为了让未来的搜索者可以找到这个..我发现的另一条信息..

不会将 pInt+5bytelocations 指向的内存块的 2 个字节复制到 pChar+5bytelocations .. 发生的情况是 2 个字节从 pInt(4*5)bytelocations 复制到 pChar+5bytelocations .. 难怪我遇到访问冲突,我试图在我不应该阅读的地方阅读.. :)

0 投票
19 回答
112967 浏览

c - 对于数组,为什么a[5] == 5[a]?

正如 Joel 在Stack Overflow 播客 #34中指出的那样,在C 编程语言(又名:K & R)中,提到了 C 中数组的这个属性:a[5] == 5[a]

Joel 说这是因为指针运算,但我还是不明白。为什么a[5] == 5[a]呢?

0 投票
8 回答
16032 浏览

c++ - 检查 C++ 中的指针定义性

如何检查 C++ 中是否定义了变量,特别是指针?假设我有一堂课:

0 投票
8 回答
4824 浏览

c++ - 智能指针+“this”被认为是有害的?

在使用智能指针的 C++ 项目中,例如boost::shared_ptr,关于使用“ this”的良好设计理念是什么?

考虑一下:

  • 存储包含在任何智能指针中以供以后使用的原始指针是很危险的。您已经放弃了对对象删除的控制,并相信智能指针会在正确的时间执行此操作。

  • 非静态类成员本质上使用this指针。这是一个原始指针,无法更改。

如果我曾经存储this在另一个变量中或将其传递给另一个函数,该函数可能会存储它以供以后使用,或者将其绑定到回调中,那么当任何人决定创建指向我的类的共享指针时,我就会创建错误。

鉴于此,我什么时候适合显式使用this指针? 是否有可以防止与此相关的错误的设计范例?

0 投票
1 回答
2986 浏览

python - 使用 Python 的 ctypes 传递/读取声明为“struct_name *** param_name”的参数?

我正在尝试使用 Python 的 ctypes 库来访问扫描库SANE中的一些方法。这是我第一次使用 ctypes,也是我一年多以来第一次不得不处理 C 数据类型,所以这里有一个公平的学习曲线,但我认为即使没有这个特定的声明也会很麻烦:

首先,我已经成功处理了SANE_Status(an enum) 和SANE_Bool(a typedef to c_int)。这些都很简单。另一方面,第一个参数给我带来了各种各样的悲伤。我不熟悉“ ***”符号,到目前为止,我的示踪子弹只产生了垃圾数据。如何格式化此函数的输入,以便我可以读回我的 Python 结构对象列表?作为参考,被引用的 C 结构是:

其中SANE_String_Const定义为c_char_p.

我的这个对象的 Python/ctypes 版本是:

关于我应该传递什么的建议,以便我可以从中获得预期的行为(结构对象列表)?所有回应表示赞赏。

更新1:

使用以下内容,我能够检索到正确的 SANE_Device Python 结构:

但是,1) 糟糕和 2) 似乎只有在只有一个结果时才会起作用。我不能 len() on devices.contents.contentsor devices.contents.contents.contents。我如何确定结果的数量?SANE 文档指定“如果函数成功执行,它会存储一个指向 *device_list 中指向 SANE_Device 结构的指针的 N​​ULL 终止数组的指针”。建议?

更新 2:

我能够传递一个十项数组,然后使用以下方法访问第一个元素:

但是,十显然是一个任意数字,我无法确定实际结果的数量。devices.contents.contents.contents[1].name在仅连接一个设备时尝试访问会导致分段错误。必须有一种适当的方法来处理像 ctypes 中这样的可变长度构造。

0 投票
6 回答
7956 浏览

.net - VB.NET 中的引用

对我来说有些不清楚的是对 VB.NET 中的类的引用(指针?)。我要问的问题可以通过一些测试来回答,但我想知道是否有人可以发布一个体面的解释(或链接,也是)。

如果你创建一个类:

然后是一个实际使用这个类作为属性的类:

然后像这样使用它:

现在函数BooleanCheck将始终返回true,即使引用是UsingClass“按值”而不是按引用传递给新类的。因此,没有制作类的副本,但myReferencein 中的局部变量UsingClass仍然引用/指向Reference.RuntimeOrSomething

这怎么能优雅地解释呢?

0 投票
5 回答
1054 浏览

c - 初学者 C 程序员需要指针帮助(我认为)

我是一名初级程序员,我正在学习我的第一语言 C。

我主要从 Deitel 和 Deitel 的 C How to Program 一书中学习,但也使用来自大学的示例任务和事物,但是我被困在一个。

我对指针有一个非常非常基本的理解 - 在变量前面添加 & 使它打印一个地址,并且 * 使用指针来使用存储在该地址等处的值。

我编写的代码用于计算两个数字的最大(最大?)公分母,实际上根本不需要或涉及指针。它使用两个函数并且逻辑都是正确的,因为如果我从第二个函数执行它,它会在屏幕上打印出正确的答案,而不是将其返回到主函数。这就是问题所在。

当第二个函数返回答案值时,由于某种原因它返回我只能假设是一个指针。我不知道它为什么这样做。我将能够使用它并将其转换为查找值 - 但是它似乎是第二个函数的本地指针并被覆盖。我在网络上或在我的书中找不到任何东西可以让我知道如何解决这个问题。

谢谢你读到这里。我跑题太多了。

这是我的代码和输出。任何帮助或指示(请原谅双关语)将不胜感激。我知道我可以让它在第二个函数中打印,但我更想知道它如何以及为什么它没有像我想要的那样返回值。

代码

输出(使用 12 和 15 - 答案应该是 3)

来自 frankodwyer 的这样一个简单的解决方案。这是我无法发现或不知道的微小事物。那么返回的不是指针而是垃圾?

太感谢了。