c语言中的星号“*” 都有啥作用,含代码提问 求帮忙读一行程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中的星号“*” 都有啥作用,含代码提问 求帮忙读一行程序相关的知识,希望对你有一定的参考价值。

新人啊 看不明白前辈的代码 不知道这几句的星号应该怎么解释

unsigned short in_cksum(unsigned short * addr,int len);
char * packet;
是声明指针类型变量吗,为什么中间有个空格

第一句是函数的声明,参数是一个unsigned short类型的数据指针和int类型的数据长度;
第二句式char类型的指针,至于中间的空格多少是个人编码习惯的问题,一般*会在定义的指针变量左边且无空格!
希望可以帮到你
参考技术A 是声明指针类型,其实可以有空格也可以没有,主要是看个人喜好了,
不过建议没有空格
参考技术B 这是申明指针啊!申明指针通常有两种习惯,一种是char* packet,一种是char *packet。

Perl 星号符号有啥作用

【中文标题】Perl 星号符号有啥作用【英文标题】:What does the Perl asterisk sigil doPerl 星号符号有什么作用 【发布时间】:2016-06-17 06:23:00 【问题描述】:

我正在更新一些非常旧的 Perl 代码(不是我的代码),我在一个子例程中遇到了以下内容:

sub DoEvent 
   local(*eventWEH, $foreachFunc, @args) = @_;
   $ret = do $foreachFunc(*eventWEH, @args);

这在 Perl 5.6.1 中似乎可以正常工作,但在 Perl 5.22 中不再有效,这在 do $foreachFun( 之后会出现语法错误

变量*eventWEH前面的星号有什么作用?

如果这是“C”,我会建议某种指针。 有什么建议吗?

ETA:这个子被调用,第一个参数有很多不同的类型。例如:

 &DoEvent($abc, "DoAbc", @args);

 &DoEvent(@xyz, "DoXyz", @args);

所以根据给出的答案,看起来 *eventWEH 可以采用不同的数据类型来匹配传递给子的任何参数。

【问题讨论】:

确定不是&DoEvent(\$abc, "DoXyz", @args)&DoEvent(\@xyz, "DoXyz", @args)?您发布的内容没有多大意义。 【参考方案1】:

语法错误与 glob(带有星号符号的符号)无关。语法错误是由于在 5.20 中删除了do $func(LIST)。替换

$ret = do $foreachFunc(*eventWEH, @args);

$ret = $foreachFunc->(*eventWEH, @args);

至于你的字面问题,*foo 是一个 typeglob,或简称 glob。 glob 是以下 C 结构实例的代理:

struct gp 
    SV *        gp_sv;          /* scalar value */
    struct io * gp_io;          /* filehandle value */
    CV *        gp_cv;          /* subroutine value */
    U32         gp_cvgen;       /* generational validity of cached gp_cv */
    U32         gp_refcnt;      /* how many globs point to this? */
    HV *        gp_hv;          /* hash value */
    AV *        gp_av;          /* array value */
    CV *        gp_form;        /* format value */
    GV *        gp_egv;         /* effective gv, if *glob */
    PERL_BITFIELD32 gp_line:31; /* line first declared at (for -w) */
    PERL_BITFIELD32 gp_flags:1;
    HEK *       gp_file_hek;    /* file first declared in (for -w) */
;

Glob 主要在内部使用,尽管一些文件句柄主要通过命名的 glob(*STDIN*STDOUT*STDERR)访问,并且它们用于创建别名 (*foo = \&bar;)。

【讨论】:

perl -i~ -pe's/do (\$?\w+)(?=\()/$1->/g' *.pl 或类似的东西应该可以解决所有问题。【参考方案2】:

它是包含所有其他类型的命名空间符号 sigil。在较旧的 Perl 代码中,它通常用于处理文件句柄。现代 Perl 应该使用简单的标量 - 即$

【讨论】:

【参考方案3】:

glob,直接访问符号表。例如,通过这种方式,您可以在不引用类型(或具有该名称的任何类型)的情况下访问变量。现在几乎没有理由必须在 Perl 中使用它。

这里有一些参考资料on symbol table、an interesting use of it 和一些overview。书籍“Programming Perl”和“Mastering Perl”有权威性的报道。

【讨论】:

【参考方案4】:

在过去,您必须使用 typeglob 来传递文件句柄,如下所示:

# eventWEH is a global filehandle
open( eventWEH, $filename ) or die "Couldn't open $filename: $!";
somefunc( *eventWEH );

但是现在你有适当的词法文件句柄,所以你可以这样做

my $event_fh;
open( $event_fh, '<', $filename ) or die "Couldn't open $filename: $!";
somefunc( $event_fh );

【讨论】:

目前,我们仍然使用 typeglobs 来传递文件句柄。我们只是将它们的引用存储在标量中。 print("$event_fh\n");. 不过,我们不需要。我们可以将文件句柄直接放入标量中。 perl -e'my $fh = \*STDOUT; print($fh "$fh\n"); $fh = *$fhIO; print($fh "$fh\n");'

以上是关于c语言中的星号“*” 都有啥作用,含代码提问 求帮忙读一行程序的主要内容,如果未能解决你的问题,请参考以下文章

Perl 星号符号有啥作用

`:_*`(冒号下划线星号)在 Scala 中有啥作用?

C语言里的system函数都有啥用

*(星号)符号在函数参数附近有啥作用以及如何在其他情况下使用它?

C语言当中结构句后面一个星号,是啥意思?

逗号运算符有啥作用?