问题标签 [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 - 指针算术和导航 malloc'ed 数组
好的,所以我正在为 iPhone 开发一个 OpenGL ES 应用程序,我遇到了一个有趣的问题。
我有一个函数可以根据细节级别和球坐标范围计算球体的顶点、法线和纹理坐标。
最初,将顶点存储在数组中看起来像这样:
结果证明这是一场灾难。我最终得到了类似 AT&T 标志的东西。:-) 我发现添加了一个计数器并使用它来索引数组修复了所有内容:
我的问题是:使用临时指针并将其向前移动会发生什么?我现在得到的是否同样有效,或者指针算法会更好?
c++ - c++中向量的指针运算
我有一个 std::vector,即
我想将数据从我的 mdata 向量传递到 GSL 函数
作为你。我已经发现我可以做类似的事情
如果我想将固定 i,j 的数据从 mdata 传递到 gsl_spline_init(),这很好。
但是,现在我需要传递 mdata 的第一个维度,因此对于固定的 j,k。
我知道对于任何两个固定索引,其余维度上的所有向量都具有相同的长度,因此我的向量是“常规立方体”。所以我需要的所有值之间的偏移量应该是相同的。
当然我可以创建一个临时向量
但这似乎太复杂了。也许有一种方法可以通过指针算术来实现我的目标?
任何帮助是极大的赞赏 :)
c++ - 在 C++ 类中进行指针数学运算:它“合法”吗?
啊喂喂喂
我想知道是否可以执行以下操作:
只是好奇,丹奥
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 可执行文件中调用时。
我想我应该提到再次调用对象的加载方法可以正常工作。因此,捕获异常并运行该方法进行第二次“通过”就像弹出窗口阻止程序一样。但当然也有例外。
c++ - 使用字节偏移量进行操作的更简洁的指针算术语法
在下面的代码行中,我需要pm
通过其中一个字段中的字节偏移量来调整指针。有没有更好/更简单的方法来做到这一点,而不是不断地来回转换char *
,PartitionMap *
这样指针算术仍然有效?
对于那些无法从代码中理解的人,它正在循环通过缓冲区中的可变长度描述符,该缓冲区继承自PartitionMap
.
同样对于相关人员,partitionMapLength 始终返回运行该系统的系统支持的长度。我正在遍历的数据符合UDF规范。
c# - 实现 Win32 FileWrite
我通过带有签名的 Write(..) 方法来实现这一点:
正如我通过查看本文了解到的(讨论了读取对应项的使用),我需要在我的代码中实现一个 while 循环,因为缓冲区的写入/读取可能不会一次性完成。这是问题开始的地方:
如果我想保留我的 C# 方法签名以接受 void*,这与链接的读取示例不同,其中字节 * 被接受为缓冲区的参数。
这意味着在通过 WriteFile 一次之后,我应该将我的 void* 移动到尚未写入的缓冲区的开头。我显然不能通过仅使用包含写入字节数的 uint 增加 void* 来做到这一点......我知道 void* 没有预定的大小,因此增加是不可能的,但我想知道我应该如何实现我正在努力做。
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 *
来说是正确的类型。
c - 当 sizeof(char) != 1 时 C 中的字节精度指针算术
如何以单字节精度便携地执行指针运算?
请记住:
char
在所有平台上都不是 1 字节sizeof(void) == 1
仅在 GCC 中作为扩展提供- 虽然某些平台可能有指针 deref 指针对齐限制,但算术可能仍需要比最小基本 POD 类型的大小更精细的粒度
pointer-arithmetic - 指针类型的算术/
请使用数字和字符指针添加和减去类似类型的指针的一些示例。使用 C。
谢谢。
c - C指针算术
鉴于此代码:
什么是q - p
以及如何?