*(指针)和(*指针)有什么区别?
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
您可以将相同的逻辑应用于所有其他组合
请看下面的代码块。你能告诉我 *(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
您可以将相同的逻辑应用于所有其他组合