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

c - 在 C 中复制字符串

我对这段代码感到困惑:(http://www.joelonsoftware.com/articles/CollegeAdvice.html

执行顺序是什么?*s = *t 首先完成,然后它们各自递增吗?或者其他方式?

谢谢。

编辑:如果它是:

0 投票
6 回答
1450 浏览

c - 指针算术和数组:什么是真正合法的?

考虑以下陈述:

在这个阶段,两个指针都指向各自数组地址的开始。对于 *pFarr,我们目前正在查看 11,对于 *pVarr,我们正在查看 7。

同样,如果我通过 *farr 和 *varr 请求每个数组的内容,我也会得到 11 和 7。

到现在为止还挺好。

现在,让我们尝试pFarr++pVarr++。伟大的。正如预期的那样,我们现在正在查看 22 和 8。

但现在...

试图向上移动farr++并且varr++......我们得到“错误类型的参数来增加”。

现在,我认识到数组指针和常规指针之间的区别,但由于它们的行为相似,为什么会有这种限制?

当我还考虑到在同一个程序中我可以以表面上正确的方式和另一种不正确的方式调用以下函数时,这让我更加困惑,并且我得到了相同的行为,尽管与上面发布的代码中发生的情况相反!?

.

有人可以帮助我理解为什么数组指针和指针在某些情况下的行为方式相似,但在其他情况下却不同吗?

非常感谢。

编辑:像我这样的菜鸟可以从这个资源中进一步受益:http: //www.panix.com/~elflord/cpp/gotchas/index.shtml

0 投票
3 回答
294 浏览

c++ - 带指针的 C++ 算术

我正在尝试添加以下内容:

我有一个双指针数组叫A。我有另一个双指针数组叫它B,我有一个无符号整数叫它C。

所以我想做:

我该怎么做?我做了:

我不认为我这样做是正确的。

编辑:我想要做的是,取双指针数组的索引 i 处的值并从中减去一个 int,然后将该结果存储到索引 i 处的双指针数组中。

0 投票
2 回答
1144 浏览

c - 为什么要在 offsetof() 中减去空指针?

Linux 的stddef.h定义offsetof()为:

而关于offsetof()http://en.wikipedia.org/wiki/Offsetof)的维基百科文章将其定义为:

(char *)0为什么要在维基百科版本中减去?在任何情况下,这实际上会有所作为吗?

0 投票
3 回答
2546 浏览

c - 指针算术和有符号/无符号转换!

在指针算术的情况下,整数是否会自动转换为其有符号变体?如果是,为什么?

假设我这样做

其中 pointer 是指向 int 的指针,uiVal 初始化为 -1,然后我发现指针中的地址减 4。为什么这里不考虑 -1 的无符号值?

0 投票
1 回答
8213 浏览

c - C - 如何将数组中的指针转换为索引?

在 C 的许多搜索函数中(想到 bsearch),如果找到结果,则返回指向数组中该点的指针。如何将此指针转换为搜索的数组中的索引(我假设使用指针算法)。

0 投票
3 回答
1586 浏览

c - `*((char*)ptr+4))` 是做什么的?

*((char*)ptr+4))这样做的目的是什么?

0 投票
2 回答
201 浏览

c++ - 减法指针:这种缺失的间接级别从何而来?

我无法理解 MS VC 编译器在这个上的行为。这条线编译得很好,但我得到的结果根本不是我所期望的:

CS1 和 CS2 参数声明如下:

tCS1 和 tCS2 是分别包含一个 int 和一个 __int64 的结构。

这是为了检查我的参数 CS1 和 CS2 之间的堆栈距离,它们都是指针。当我在这一行中断执行并使用调试器获取我的两个变量的地址时,我发现它们确实相距 8 个字节(x64 平台)。

但是,比较的结果是错误的。

下面是编译器生成的汇编代码:

(然后它使用存储在 rdi 中的结果进行比较,并进行调用)

是的,编译器正在比较我的指针参数的值,而不是它们的地址。我在这里遗漏了一个间接级别,它去哪儿了?

当然,我无法在测试环境中重现这一点,而且我不知道该往哪里看。我正在将 32 位机器上的这段代码交叉编译到 x64 平台(我必须这样做),这是唯一“奇怪”的事情。任何想法,任何提示?

0 投票
2 回答
7831 浏览

delphi - pchar 和 pbyte 有什么区别

为什么我不能执行这个操作:

0 投票
9 回答
146261 浏览

c - C中void指针的指针算法

当指向特定类型(例如int, char, float, ..)的指针增加时,它的值会增加该数据类型的大小。如果void指向大小数据的指针x递增,它如何指向x前面的字节?编译器如何知道添加x指针的值?