词法、语法构成语言的一个基本条件。光有一个个的单词符号是不够的,这些符号的不同组合可以表达不同的含义。 例如,声明是什么,表达式什么,语句是什么,程序是什么等等。

理解函数声明

看看下面一个语句:

1
(*(void(*)())0)();

乍一看到这个语句,肯定当场吓尿!啥鬼玩儿意!

black_ask

别着急! 慢慢来,庖丁解牛,让我们看看作者这个大牛是怎么来剖开其五脏六腑的?

  • 变量声明

    • 简单变量声明:float f;
    • 也可以对变量名加上括号,float ((f));
    • 变量指针:float *pf;
  • 函数声明

    • 简单的函数声明:float ff()

    • 复杂的函数声明:float ff(float)

    • 指针形式:float (*pff)(); // 为什么这里需要加上括号呢?

      因为括号的优先级高于*float *pff(); 中,()优先和 pff结合, 表示的是函数pff(), 返回值是为指向浮点数指针。 (*pff) 表示一个指针,(*pff)()表示函数指针,float (*pff)(); 表示返回值为 float 的函数指针。

  • 函数调用

    • 直接函数调用:ff();
    • 指针函数调用:(*pff)()