Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是int a=(i*&x2B;3);c编译器将如何执行它?_C_Parsing_Operators_Expression - Fatal编程技术网

什么是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