我没有得到以下指针变量声明在c中的含义

  1. char(*p)[15];
  2. char(*p)(int *a);
  3. int(*pt)(char*);
  4. int *pt(char*);

有人帮忙吗?

基本规则:从标识符开始,在可以的时候向右读,在必要时离开。

  1. 从标识符*开始。 说出来,然后是“是一个”。 把“左脚”放在左边一个字符。
  2. 向右读,直到你结束或a ) 。 把你的“右脚”一个字符放在那个位置的右边,如果这就是你所击中的那个。
    • 如果你在向右看时看到[42] ,请说“42的数组”。
    • 如果你看到一个(当你向右看时 ,说“function获取”,然后递归说出每个参数的类型(但省略参数名称本身),然后是“并返回”。
  3. 现在跳到你的左脚并向左看,直到你开始或a ( 。将你的左脚放在左边一个角色(如果那就是你击中的那个)。
    • 如果您在向左看时看到*& ,请说“指向”或“引用”。
    • 你看到的任何其他东西(例如constintMyFoo ),就这么说吧。
  4. 如果你开始,你就完成了。 否则,跳回你的右脚并转到2。

*如果没有标识符,想象它必须去哪里 – 我知道这很棘手,但只有一个合法的位置。

遵循以下规则:

  1. p是一个指向15 char数组的指针
  2. p是一个指向函数的指针,指针指向int并返回char
  3. pt是一个指向函数的指针,它指向char并返回int
  4. pt是一个函数,它指向char并返回指向int的指针

找出指针所指向的类型的一个简单技巧就是删除*并查看剩下的内容:

  1. char p[15];
  2. char p(int *a);
  3. int pt(char*);
  4. int pt(char*);

你得到的是指针指向的类型的变量声明。 或者不是在第四种情况:

 int *pt(char*); 

是函数原型而不是有效的指针声明。

编辑:

原因是没有括号,函数调用“operator”优先于指针解引用运算符。 在上面的例子中,简明的声明是:

我们有一个pt(char *)函数,它返回一个int *

 int (*pt)(char *); 

翻译为:

*pt是一个接受char *并返回int的函数。

这本质上意味着pt本身就是指向该类型的指针。

  1. 指向十五个字符数组的指针。
  2. function指针。 采用int指针并返回char
  3. 与4相同
  4. function原型。 取char并返回int。