问题标签 [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 编程新手,我对指针数学感到困惑。我有一个大小为 32 的字符数组。据我了解,这意味着该数组也是 32 个字节,因为字符变量因此是 1 个字节大32 characters * 1 byte = 32 bytes
。问题是当有一个函数有一个指向前面描述的字符数组的空指针时。我相信代码段
应该将 raw_sk 缓冲区中的所有插槽都设置为 0。但是,当我运行程序时,我遇到了分段错误。我认为这可能是我在地址中添加计数的事实。我想如果我要向地址添加一个,我将移动到数组中的下一个插槽。有人可以指出我哪里出错了吗?我正在使用的功能如下。谢谢!
c - 指针/地址差异
为什么这两个地址之间的差异是错误的? http://codepad.org/NGDqFWjJ
输出:
c - void* 与 char* 指针运算
我正在浏览我的教科书,我对其中的一些代码有点困惑。一方面,他们以下列方式执行指针运算:
但后来,他们执行以下操作:
我觉得他们应该是两个不同的东西,但他们把它当作同一个东西对待。我有这种感觉是因为,例如,如果您要进行数组访问(例如,对于整数数组),您将执行以下操作
在这种情况下,我不是访问整数数组中的下一个 4 个字节而不是下一个字节吗?同样,我觉得如果我有 void* a,那么 *(a+1) 应该是接下来的 4 个字节......或者不是这样吗?谢谢你。
c - 在自定义 malloc 中附加调试标头
我仍然对我的 C 生锈了,我只是没有弄清楚这一点。我想做的是实现我自己的 malloc,这样我就可以跟踪分配并调试对 free() 的丢失调用。我有一个这样的标题:
我的自定义 malloc 看起来像这样:
但我显然弄错了我的指针算术,因为它很快就爆炸了。但是,如果我将 a 添加void* memory
到我的结构的末尾并执行另一个 malloc ,那么它似乎做得很好,问题是my_free
如果我这样做我真的无法找到标题。我试图基本上预先添加标题,以便我可以做一些反向指针算法来免费获取标题。
我在这里做错了什么?
objective-c - Objective-C / iOS编程中有用的指针算法的任何例子?
我知道 C 中存在指针算术,但是任何人都可以举出任何例子来说明为什么指针算术在iOS 的 Objective-C 编程中有用吗?我被难住了……
memory-management - C++ 中的指针算术使用 sizeof(type) 增量而不是字节增量?
我对 C++ 中指针算术的行为感到困惑。我有一个数组,我想从当前数组向前移动 N 个元素。由于在 C++ 中指针是 BYTES 中的内存地址,所以对我来说代码应该是newaddr = curaddr + N * sizeof(mytype)
. 但是它产生了错误;后来我发现newaddr = curaddr + N
一切正常。为什么这样?它真的应该是地址+ N而不是地址+ N * sizeof吗?
我注意到它的部分代码(所有内存分配为一个块的二维数组):
c++ - C/C++:指针算术
我在 Pointer Arithmetic 中读了一点,我遇到了两件我无法理解的事情,也不知道它的用途
并且
有人可以向我解释一下它们是如何工作的以及何时使用它们。
编辑:
我的意思是,如果我只取两个地址并减去它们,它们会产生什么
如果我取两个地址并比较它们,结果是什么或比较基于
编辑:我现在了解减去地址的结果,但比较地址我仍然不明白。
我知道 1<2,但是一个地址如何大于另一个地址以及它们的比较对象是什么
c - C 内存分配初始化和处理
我在这里的任务遇到了麻烦。我需要创建一个全局空闲内存块并对其进行 malloc。由于类型转换和处理错误,在初始化它时遇到了一些麻烦。
就像 C 中第一个数组实际上是指向第一个元素的指针的数组一样,我的内存块需要与我可以使用指针算法来定位内存块的地方相似。
指向这些内存地址的地址/指针将通过结构/链接存储为内存块的标头。
c - 什么时候在 C 中未定义指针减法?
这是有效的还是未定义的?
我会假设它是有效的,但我读到了一些关于它未定义的内容,所以我用谷歌搜索了它。这些链接似乎不可避免地声称它是未定义的:
但是,在这些 SO 问题中没有提到它:
这些都在谈论不是两个指针在同一个“数组”中。这实际上是否意味着堆栈上有一个普通的旧 C 数组?
如果它是未定义的,对我来说似乎很奇怪……当我可以访问一个常量指针和一个移动指针时,为什么要强制我携带一个计数器变量?
c - C如何检索二维数组的行地址
当您只使用一个下标访问二维数组时,有人可以向我解释 C 如何检索一行的正确内存地址吗?
例子 -
我知道在 C 中下标时实际上发生的是指针添加,因此对于一维数组,数组名称指向元素 0。在这种情况下,如果我想要元素 1,编译器将采用起始地址(比如 4000)和向它添加 4(假设为 4 位 int),以便返回的是内存地址 4004 处的项目。
我的理解是,当您填充二维数组时,如我的示例所示,它们是按顺序分配的,所以我会有
1 2
3 4
在地址
4000 4004
4008 4012
那么 C 如何计算出在这种情况下 array2D[1] 应该指向 4008 而不是 4004?它是运行 sizeof() 运算符还是我在这里误解了基本原理?
提前致谢