Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
*ptr的C到Perl转换++_C_Perl - Fatal编程技术网

*ptr的C到Perl转换++

*ptr的C到Perl转换++,c,perl,C,Perl,我有一个指向数组的指针,或者需要对代码进行大量修改以使其正常工作,或者只是找出下面语句的等价部分 ptr = array; *ptr++ = value; 到目前为止,我已经掌握了大部分 $ptr = \@array; $$ptr = $value; 但这不会增加指针。我该怎么办?Perl中没有指针。你所拥有的是: my $ary_ref = \@array; $ary_ref现在是对@array的引用。您不能取消引用$ary\u ref以获取标量 但是,您可以通过多种方式迭代@array

我有一个指向数组的指针,或者需要对代码进行大量修改以使其正常工作,或者只是找出下面语句的等价部分

ptr = array;
*ptr++ = value;
到目前为止,我已经掌握了大部分

$ptr = \@array;
$$ptr = $value;

但这不会增加指针。我该怎么办?

Perl中没有指针。你所拥有的是:

my $ary_ref = \@array;
$ary_ref现在是对@array的引用。您不能取消引用$ary\u ref以获取标量

但是,您可以通过多种方式迭代@array的元素。例如,如果您愿意,可以执行以下操作:

#!/usr/bin/env perl

use strict; use warnings;

my @array;

my $ptr = sub {
    my ($i, $ref, $val, $size) = (0, @_);
    sub { $i < $size ? $ref->[$i ++ ] = $val : () }
}->(\@array, deadbeaf => 10);

1 while defined $ptr->();

use YAML;
print Dump \@array;
在C中,在Perl中,它可能变成:

$array[$_] = $value for 0 .. $#array;
或者

或者


等等。您应该解释总体目标是什么,而不是询问C中的特定语句。

C代码修改数组的第一个元素,并且可能会更改数组其余部分的至少一部分

#include <stdio.h>

int main(void)
{
  int array[] = { 0, 0, 0, 0, 0 };
  int value = 42;
  int *ptr;
  int i;

  ptr = array;
  *ptr++ = value;

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++)
    printf("%d ", array[i]);
  puts("\n");

  return 0;
}
或者说过于直白

$ perl -wle '@a=(0)x5; $ptr = \$a[0]; $$ptr = 42; print "@a"'
42 0 0 0 0
您的问题给出了C代码的单个簿记细节。更广泛的背景是什么?C代码在做什么


一般来说,不要用Perl编写C。从广义上看,C代码往往一次处理一个数组,但Perl修改整个概念块,例如用字符串的正则表达式或变换整个数组。

这是一个初学者问题的邪恶方面。当然,但这是过程的标准。ptr++=数值;同样邪恶。在阅读了C代码之后,我意识到逐行转换的想法非常愚蠢,并使用了一种更简单的非数组/指针/concat方法。我非常喜欢@SinanÜnür的代码片段。肯定会用它来迷惑人们。。。heh@EricFossum最简单的答案也是最没有帮助的。
$_ = value for @array;
#include <stdio.h>

int main(void)
{
  int array[] = { 0, 0, 0, 0, 0 };
  int value = 42;
  int *ptr;
  int i;

  ptr = array;
  *ptr++ = value;

  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++)
    printf("%d ", array[i]);
  puts("\n");

  return 0;
}
42 0 0 0 0
$ perl -wle '@a=(0)x5; $a[0] = 42; print "@a"'
42 0 0 0 0
$ perl -wle '@a=(0)x5; $ptr = \$a[0]; $$ptr = 42; print "@a"'
42 0 0 0 0