问题标签 [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.

0 投票
1 回答
800 浏览

c - 指针算术和导航 malloc'ed 数组

好的,所以我正在为 iPhone 开发一个 OpenGL ES 应用程序,我遇到了一个有趣的问题。

我有一个函数可以根据细节级别和球坐标范围计算球体的顶点、法线和纹理坐标。

最初,将顶点存储在数组中看起来像这样:

结果证明这是一场灾难。我最终得到了类似 AT&T 标志的东西。:-) 我发现添加了一个计数器并使用它来索引数组修复了所有内容:

我的问题是:使用临时指针并将其向前移动会发生什么?我现在得到的是否同样有效,或者指针算法会更好?

0 投票
2 回答
1379 浏览

c++ - c++中向量的指针运算

我有一个 std::vector,即

我想将数据从我的 mdata 向量传递到 GSL 函数

作为你。我已经发现我可以做类似的事情

如果我想将固定 i,j 的数据从 mdata 传递到 gsl_spline_init(),这很好。

但是,现在我需要传递 mdata 的第一个维度,因此对于固定的 j,k。

我知道对于任何两个固定索引,其余维度上的所有向量都具有相同的长度,因此我的向量是“常规立方体”。所以我需要的所有值之间的偏移量应该是相同的。

当然我可以创建一个临时向量

但这似乎太复杂了。也许有一种方法可以通过指针算术来实现我的目标?

任何帮助是极大的赞赏 :)

0 投票
6 回答
1830 浏览

c++ - 在 C++ 类中进行指针数学运算:它“合法”吗?

啊喂喂喂

我想知道是否可以执行以下操作:

只是好奇,丹奥

0 投票
2 回答
2339 浏览

c# - 系统算术异常:Delphi 通过 C++/CLI 包装器调用 C# DLL

我有一个使用 XslCompiledTransform 类进行 xml 操作的 C# DLL。我为 C# DLL 偷了一个 C++/CLI 包装器。

使用 Delphi 5 实现 C++/CLI 包装器时,我收到系统算术错误。这是 Delphi 5 声明:

C# 公共方法的主体会创建一个新的 XslCompiledTransform 对象,并且当新创建的对象运行其加载方法时会立即弹出异常。例如:

如前所述,.NET DLL 引发的异常是系统算术异常。这只发生在从 Delphi 可执行文件中调用时。

我想我应该提到再次调用对象的加载方法可以正常工作。因此,捕获异常并运行该方法进行第二次“通过”就像弹出窗口阻止程序一样。但当然也有例外。

0 投票
7 回答
1201 浏览

c++ - 使用字节偏移量进行操作的更简洁的指针算术语法

在下面的代码行中,我需要pm通过其中一个字段中的字节偏移量来调整指针。有没有更好/更简单的方法来做到这一点,而不是不断地来回转换char *PartitionMap *这样指针算术仍然有效?

对于那些无法从代码中理解的人,它正在循环通过缓冲区中的可变长度描述符,该缓冲区继承自PartitionMap.

同样对于相关人员,partitionMapLength 始终返回运行该系统的系统支持的长度。我正在遍历的数据符合UDF规范。

0 投票
1 回答
771 浏览

c# - 实现 Win32 FileWrite

我通过带有签名的 Write(..) 方法来实现这一点:

正如我通过查看本文了解到的(讨论了读取对应项的使用),我需要在我的代码中实现一个 while 循环,因为缓冲区的写入/读取可能不会一次性完成。这是问题开始的地方:

如果我想保留我的 C# 方法签名以接受 void*,这与链接的读取示例不同,其中字节 * 被接受为缓冲区的参数。

这意味着在通过 WriteFile 一次之后,我应该将我的 void* 移动到尚未写入的缓冲区的开头。我显然不能通过仅使用包含写入字节数的 uint 增加 void* 来做到这一点......我知道 void* 没有预定的大小,因此增加是不可能的,但我想知道我应该如何实现我正在努力做。

0 投票
8 回答
9548 浏览

c - void 大小未知时的指针运算

在 Visual Studio C++ 版本 9(可能还有其他版本)中,以下代码:

生成这些 错误

此代码在 GCC 下工作,GCC 将其sizeof(void)视为1.

有没有办法绕过这个限制,因为char *为了指针算术的目的而显式地强制转换会增加混乱(void *被很好地识别并用作指向原始内存的无类型指针)。

更新0

  • 请注意,我很清楚该标准的存在。
  • 想做原始指针算术。
  • 我要sizeof(void)表明我很清楚这不是1问题的原因。
  • 该代码示例只是为了演示生成错误所需的内容。
  • 我知道这不是一种“正常”的使用方式void,但这是 C,并且会发生这些事情。
  • 是的,人们需要在底层做这件事。我不是在追求为什么,我在追求如何。如果你想知道为什么,看看一些内核源代码,或者你友好的 glibc。

更新1

这个问题似乎引起了很大的混乱。问题不在于为什么拥有sizeof(void) == 1不标准,而在于如果不是标准该怎么办。

在要进行单字节指针运算的情况下,事实证明强制转换为char *是正确的答案,不是因为*(void *)没有大小,而是因为标准实际上保证*(char *)是 always 1。因此,对于原始指针算术的目的,使用char *总是正确的,并且与 GCC 扩展一致。void *

为了进一步强调这一点,void *对于指向无类型内存的指针是正确的选择,并且对于原始指针算术char *来说是正确的类型。

0 投票
7 回答
3653 浏览

c - 当 sizeof(char) != 1 时 C 中的字节精度指针算术

如何以单字节精度便携地执行指针运算?

请记住:

  • char在所有平台上都不是 1 字节
  • sizeof(void) == 1仅在 GCC 中作为扩展提供
  • 虽然某些平台可能有指针 deref 指针对齐限制,但算术可能仍需要比最小基本 POD 类型的大小更精细的粒度
0 投票
2 回答
136 浏览

pointer-arithmetic - 指针类型的算术/

请使用数字和字符指针添加和减去类似类型的指针的一些示例。使用 C。

谢谢。

0 投票
5 回答
5742 浏览

c - C指针算术

鉴于此代码:

什么是q - p以及如何?