问题标签 [pointer-arithmetic]
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.
c# - C#中的指针数学
我正在尝试使用一些 pinvoke 代码来调用 C 函数。该函数用数据填充缓冲区。
该结构设置为长度的 DWORD,后跟一个字符串。如何从 IntPtr 中提取字符串?
objective-c - 通过指针算术访问数组值与 C 中的下标
我一直在读到,在 C 中,使用指针算法通常比下标访问数组更快。即使使用现代(据说是优化的)编译器也是如此吗?
如果是这样,当我开始在 Mac 上从学习 C 转向 Objective-C 和Cocoa时,情况是否仍然如此?
在 C 和 Objective-C 中,哪种是数组访问的首选编码风格?哪个(由各自语言的专业人士)认为更清晰,更“正确”(因为没有更好的术语)?
c - 对于数组,为什么a[5] == 5[a]?
正如 Joel 在Stack Overflow 播客 #34中指出的那样,在C 编程语言(又名:K & R)中,提到了 C 中数组的这个属性:a[5] == 5[a]
Joel 说这是因为指针运算,但我还是不明白。为什么a[5] == 5[a]
呢?
c - 指针算术
有没有人有任何关于指针运算的好文章或解释(博客、示例)?图的听众是一群学习C和C++的Java程序员。
c - 有哪些令人信服的例子表明指针算法比数组下标更可取?
我正在为介绍性 C 课程准备一些幻灯片,并且我正在尝试展示在数组下标上使用指针算术的好例子(和动机)。
我在书中看到的很多例子都是相当的。例如,许多书籍展示了如何反转字符串中所有值的大小写,但除了将 a[i] 替换为 *p 之外,代码是相同的。
我正在寻找一个好的(和简短的)一维数组示例,其中指针算术可以产生更优雅的代码。有任何想法吗?
c - C中的指针算术
考虑以下代码片段:
我知道指针算术是智能的,这意味着该操作q++
向前推进q
了足够的字节以指向下一个 3 整数数组,所以第一个打印是 ' 12, 0
' 我并不感到惊讶,这意味着递增q
使它在 12 中变大。
但第二版确实让我吃惊。它打印 1!
那么为什么它会打印 1 而不是 12?这让我很困惑。
c - 哪些 C 编译器有指针减法下溢?
因此,正如我从Michael Burr对此答案的评论中了解到的那样,C 标准不支持从数组中第一个元素(我想包括任何分配的内存)的指针中减去整数。
来自组合 C99 + TC1 + TC2 (pdf) 的第 6.5.6 节:
如果指针操作数和结果都指向同一个数组对象的元素,或者超过数组对象的最后一个元素,则计算不应产生溢出;否则,行为是未定义的。
我喜欢指针算术,但这从来不是我以前担心过的事情。我一直假设:
那个c == a
。
因此,虽然我相信我以前做过这种事情并且没有被咬,但这一定是由于我使用过的各种编译器的好意——它们已经超出了标准所要求的使指针算术按我想象的方式工作。
所以我的问题是,这有多普遍?是否有常用的编译器对我不那么友好?超出数组边界的正确指针算术是事实上的标准吗?
c - 在C中访问超出数组末尾的元素
我一直在阅读 K&R 关于 C 的书,发现 C 中的指针运算允许访问数组末尾之外的一个元素。我知道 C 几乎可以用内存做任何事情,但我就是不明白,这种特性的目的是什么?
c++ - 即使指针从未被取消引用,如何在结束后三指针中发生硬件陷阱?
Herb Sutter 在 2005年11 月 1 日的 C++ 专栏中写道...
[O] 在某些 CPU 架构中,包括当前的架构,上述代码可能会导致在创建结束后三指针的位置发生硬件陷阱,无论该指针是否被取消引用。
CPU 如何陷入位模式?关于什么 ...
额外的问题:“一些当前的 CPU 架构”这个短语是否应该通常理解为仅指运输产品,或者如果描述或暗示它们的虚构作品具有最近的出版日期,它是否也包括虚构的架构?
c - 将结构指针增加一半的结构大小
我刚刚处理了一个有趣的问题,但我看不出有什么巧妙的方法来解决它。
我有两个表示复杂图形的基本数据结构,声明如下:
实际节点紧跟在标题之后,因此通常使用以下命令创建“graph_t”
并且访问“原始”节点数组
现在,有一个支持函数在减少节点数量的缓冲区上运行。它看起来像这样:
现在,这已经很好地工作了很长时间。上面的任何错误都源于我是凭记忆写的,我只是想解释一下这个想法。
现在让我感到困惑的是,当使用新模块的缩减功能时,输入没有“正确”对齐。当我检查地址时,我注意到以下属性:
当然,这会导致一些问题,因为“偏移”值变得不正确,但这并不那么明显,因为数据结构的所有其他使用都有效(没有“真正的”对齐问题)。
这归结为我的问题 - 当偏移量不能表示为元素的整数时,您是否看到增加指针的一种巧妙方法?
找到一种不诉诸过度施法的方法的奖励积分:)