【问题标题】:i dont get what the following pointer variable declarations mean in c我不明白以下指针变量声明在 c 中的含义
【发布时间】:2010-12-08 10:49:54
【问题描述】:
  1. char(*p)[15];
  2. char(*p)(int *a);
  3. int(*pt)(char*);
  4. int *pt(char*);

有人帮忙吗?

【问题讨论】:

    标签: c variables pointers declaration


    【解决方案1】:

    基本规则:从标识符开始,尽可能向右阅读,必要时向左阅读。

    1. 从标识符*开始。说出来,后面跟着“是一个”。把你的“左脚”放在左边一个字符。
    2. 向右阅读,直到读完或)。把你的“右脚”放在) 的右边,如果那是你击中的。
      • 如果您在向右阅读时看到 [42],请说“42 数组”。
      • 如果您在阅读向右时看到(,请说“函数采用”,然后递归说出每个参数的类型(但省略参数名称本身),然后是“并返回” .
    3. 现在跳到你的左脚上,向左阅读,直到你击中开始或(。将左脚放在( 的左侧一个字符,如果这是你击中的。
      • 如果您在向左阅读时看到 *&,请说“指向”或“引用”。
      • 您看到的任何其他内容(例如constintMyFoo),直接说出来。
    4. 如果你开始了,你就完成了。否则,跳回右脚并转到 2。

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

    遵循这些规则:

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

    【讨论】:

    • 虽然有一套完整的规则集很好,但我不得不承认我的脚在跳了这么多之后受伤了...... :-)
    • 如果你有很长的声明要解码,最好不要穿紧身裤:)
    【解决方案2】:

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

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

    你得到的是你的指针所指向的类型的变量声明。第四种情况还是不行:

    int *pt(char*);
    

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

    编辑:

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

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

    虽然

    int (*pt)(char *);
    

    翻译为:

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

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

    【讨论】:

      【解决方案3】:
      1. 指向十五个字符数组的指针。
      2. 函数指针。接受 int 指针并返回 char
      3. 同4
      4. 函数原型。接受 char 并返回 int。

      【讨论】:

      • 3 看起来更像是函数指针的 typedef(实际的 typedef 关键字被省略),而不是函数原型。 4是函数原型,但是返回类型是int*,不是int
      • 3 与 4 不同。3 是函数指针,4 是函数原型。额外的括号有很大的不同。
      • 除了已经指出的其他错误,(4)的参数是指向字符的指针,而不是字符。 -1.
      猜你喜欢
      • 2012-04-04
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多