繁体   English   中英

*(指针)和(*指针)有什么区别?

[英]What is the difference between *(pointer) and (*pointer)?

请看下面的代码块。 你能告诉我*(sample)(*sample)之间的区别吗?

for(i = 0; i < num_samples ; i++ ) 
    {
        *(sample) &= 0xfff ;
        
        if( (*sample) & 0x800 ) 
            *(sample) |= 0xf000 ;
            *(sample+1) &= 0xfff ;
            
        if( *(sample+1) & 0x800 ) 
            *(sample+1) |= 0xf000 ;
            
        fprintf( my_data->fout, "%d, %d\n", *sample, *(sample+1) );
        
        sample += 2 ;
    }

这纯粹是一个关于运算符优先级的问题

*sample*(sample)(*sample)都孤立地做同样的事情。 他们deference “样本”指针

与其他运算符结合使用时,事情会变得更加有趣。 你有一个例子

 *(sample+1)

让我们拿出父母

  *sample+1  

这可能意味着两件事

  • 给我 sample 指向的值并加 1
  • 给我样本点之后的那个值

显式括弧给出

  • (*sample) + 1 => 取消引用,然后加 1
  • *(sample+1) => 添加 1 然后取消引用

那么什么是

*sample+1

意思(即没有括号来指示顺序),这并不奇怪

(*sample) + 1

您可以将相同的逻辑应用于所有其他组合

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM