什么是int a=(i*&x2B;3);c编译器将如何执行它?
这是密码什么是int a=(i*&x2B;3);c编译器将如何执行它?,c,parsing,operators,expression,C,Parsing,Operators,Expression,这是密码 int i = 3 int a=(i*+3); 不懂代码是什么 a=(i*+3) a值=9 这只是一个错误的代码格式。为了使声明清晰,请像这样重写它 int i = 3; int a = i * +3; 在标记之间插入空格。虽然一元加号运算符在这里是多余的 还有一个令人困惑的表达 int a = i+++3; 这和 int a = i++ + 3; 来自C标准(6.4词汇元素) 4如果输入流已被解析为预处理令牌,则 对于给定的字符,下一个预处理标记最长 可构成预处理标记的字
int i = 3
int a=(i*+3);
不懂代码是什么
a=(i*+3)
a值=9
这只是一个错误的代码格式。为了使声明清晰,请像这样重写它
int i = 3;
int a = i * +3;
在标记之间插入空格。虽然一元加号运算符在这里是多余的
还有一个令人困惑的表达
int a = i+++3;
这和
int a = i++ + 3;
来自C标准(6.4词汇元素)
4如果输入流已被解析为预处理令牌,则
对于给定的字符,下一个预处理标记最长
可构成预处理标记的字符序列
您可以得到许多这样令人困惑的表达式,它们省略了标记之间的空格
虽然在C语言中有一些黑暗的角落,你应该知道
例如,如果您有一个函数声明,如
void f( int x );
那么它可以被称为
(**********f)( 10 );
这相当于
f( 10 );
这是一个演示程序
#include <stdio.h>
void f( int x )
{
printf( "I'm called with %d stars!\n", x );
}
int main(void)
{
( **********f )( 10 );
return 0;
}
需要了解
C
中的使用上下文才能理解几种多用途符号,例如+
符号,它本身至少有3种常见于C
表达式中的用途:
- 加法运算符(例如
)inta=3+5;
- 表示正值的符号(例如
)inta=+3-(+3);
- 当加倍时,价值就会增加。(
for(inta=0;aIt)如果我们把子表达式分开一点应该更容易理解:
。这相当于inta=i*+3
。这当然是inta=i*(+3)
inta=i*3
这个a=i*(+3)
是一个无用的一元运算符。哦,我也喜欢它。。。+
I'm called with 10 stars!
int a=(i*3);// i * +3
int a=(i*+3);// by context '+' is a sign in this case, not an operator
int a=(i * (+3));
int func(int *value){ int a = 10+*value;//by context '*' is de-referencing 'value' not multiplying return a; }
int a = 10 + *value; //spacing is good for readability and removing ambiguity