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

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' 指针

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

 *(sample+1)

让我们去掉括号

  *sample+1  

这可能意味着两件事

  • 给我样本指向的值并加1
  • 给我样本点后的值

显式括号给出

  • (*sample) + 1 => 执行 deref,然后添加 1
  • *(sample+1) => 加 1 然后 deref

那么

*sample+1

意思(即没有括号来指示顺序),毫不奇怪它的意思是

(*sample) + 1

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