考虑下面的 C 代码。我原以为变量bar每次都会被实例化,因此会指向内存中的不同地址,但事实并非如此。
for (i = 2; i < 7; i++) {
struct foo bar;
printf("struct %u\n", bar);
}
Run Code Online (Sandbox Code Playgroud)
输出:
struct 13205520
struct 13205520
struct 13205520
struct 13205520
struct 13205520
Run Code Online (Sandbox Code Playgroud)
如果不明显,我想要的是在 5 个不同的位置生成 5 个不同struct的 s——嗯,实际上是 5 个不同的指向structs 的指针。我怎样才能做到这一点?
在 PHP 中,有一个函数array_keys,当给定一个可选值时,它将返回与提供的值匹配的数组的所有索引。所以给出这个 PHP 代码:
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
Run Code Online (Sandbox Code Playgroud)
它会输出这个:
Array
(
[0] => 0
[1] => 3
[2] => 4
)
Run Code Online (Sandbox Code Playgroud)
除了下面的代码之外,还有更多的 Perlish 方式来完成相同的功能吗?我似乎为此想起了一个map或grep技巧。
my @a = ("blue", "red", "green", "blue", "blue");
for ($i = 0; $i <= $#a; $i++) {
push(@b, $i) if ( $a[$i] eq "blue");
}
print join(',', @b)
Run Code Online (Sandbox Code Playgroud)