大家.我编写了以下代码,编译并运行它但我遇到了分段错误.
#include <stdio.h>
typedef long long ll_t;
void store_prod(ll_t * dest, int x, ll_t y) {
* dest = x * y;
}
int main(void)
{
int a = 2049;
ll_t b = 2147483645;
ll_t * c;
store_prod(c, a, b);
printf("%d * %lld = %lld\n", a, b, *c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Dev-C++中的调试器转储如下:
0x00401500 <+0>: push %ebp
0x00401501 <+1>: mov %esp, %ebp
0x00401503 <+3>: push %ebx
0x00401504 <+4>: sub $0xc, %esp
0x00401507 <+7>: mov 0x10(%ebp), %eax
0x0040150a <+10>: mov %eax, -0x10(%ebp) …
Run Code Online (Sandbox Code Playgroud) 我在 Matt Neuburg 的《iOS 13 Swift 编程基础》中看到了如下的陈述:
\n\n\n当您使用 for...in 循环访问序列时,您实际循环访问的是该序列的副本。这意味着当你循环遍历序列时,改变序列是安全的:
\n
作者为上述陈述提供了以下示例:
\nvar s : Set = [1,2,3,4,5]\nfor i in s {\n if i.isMultiple(of:2) {\n s.remove(i)\n }\n} // s is now [1,3,5]\n
Run Code Online (Sandbox Code Playgroud)\n在上面的示例中,我们可以看到原始数组从 [1,2,3,4,5,6] 更改为 [1,3,5]。这意味着数组本身已更改。因此,for in
循环不是循环原始数组的副本,而是循环数组本身。这似乎与作者上述的说法相矛盾。
所以,我不确定作者的说法是否属实。有人可以澄清一下这个问题吗?非常感谢。
\n