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

时间:2010-12-08 10:49:54

标签: c variables pointers declaration

  1. char(*p)[15];
  2. char(*p)(int *a);
  3. int(*pt)(char*);
  4. int *pt(char*);
  5. 有谁帮忙?

3 个答案:

答案 0 :(得分:2)

基本规则:从标识符开始,然后在您必须时向右阅读。

  1. 从标识符*开始。说出来,然后是“是一个”。把你的“左脚”放在左边一个字符。
  2. 向右读,直至结束或)。把你的“右脚”一个字符放在)所在的位置的右​​边,如果这就是你所击中的那个。
    • 如果您在向右看时看到[42],请说“数组为42”。
    • 如果您在向右读时看到(,说“功能正常”,则递归说出每个参数的类型(但省略参数名称本身),然后是“和”返回”。
  3. 现在跳到你的左脚并向左看,直到你开始或(。如果你击中的那个,将你的左脚放在(左侧的一个角色。
    • 如果您向左看时看到*&,请说“指向”或“引用”。
    • 您看到的任何其他内容(例如constintMyFoo),只需说出来。
  4. 如果你开始,你就完成了。否则,跳回你的右脚并转到2。
  5. *如果没有标识符,想象它必须去哪里 - 我知道这很棘手,但只有一个合法的位置。

    遵循以下规则:

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

答案 1 :(得分:1)

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

  1. char p[15];
  2. char p(int *a);
  3. int pt(char*);
  4. int pt(char*);
  5. 你得到的是指针指向的类型的变量声明。或者不是第四种情况:

    int *pt(char*);
    

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

    编辑:

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

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

    虽然

    int (*pt)(char *);
    

    翻译为:

    *pt是一个获取char *并返回int的函数。

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

答案 2 :(得分:0)

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