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

Pau*_*ine 1 c++ pointers

请参阅以下代码块。*(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 ;
    }
Run Code Online (Sandbox Code Playgroud)

pm1*_*100 7

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

*sample*(sample)并且(*sample)所有人都孤立地做同样的事情。它们是deference“样本”指针

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

 *(sample+1)
Run Code Online (Sandbox Code Playgroud)

让我们去掉括号

  *sample+1  
Run Code Online (Sandbox Code Playgroud)

这可能意味着两件事

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

显式括号给出

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

那么什么是

*sample+1
Run Code Online (Sandbox Code Playgroud)

意思是(即没有括号来决定顺序),毫不奇怪,这意味着

(*sample) + 1
Run Code Online (Sandbox Code Playgroud)

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