C中的语法理解:指针

时间:2015-09-02 15:15:27

标签: c pointers syntax

我有使用指针的中等知识。一些语法样式让我感到困惑。

像:

  1. *(uint8 *) (a) = (b)
  2. 在函数中解析引用时对类引用进行类型转换。该函数原型为func(unsigned char * a);,但它被用作func((unsigned short *) &b); ....据我所知,他们正在将一个预期的char类型指针转换为short。
  3. 任何人都可以帮我理解这些陈述在C中的确切含义吗?

2 个答案:

答案 0 :(得分:0)

第一个简单地将(a)转换为指向无符号8位整数的指针,然后将评估(b)的结果写入结果地址(作为8位数字)。

第二个不是有效的,它不应该编译。也许你记错了,它有点粗略。

答案 1 :(得分:0)

要了解C中定义的含义,请查看左右规则,它非常简单,并解释了很多http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html。它基本上意味着你从名字开始,然后向右移动建立定义,然后只有当你无法向右移动时向左移动。这可能听起来很奇怪,但让我们以数字1为例。

  1. *(uint8 *)(a)=(b)

    所以第1步是什么?从变量的名称开始,在本例中是变量。然后看看右侧定义了什么,这里什么都没有,所以移动到右边的部分,即(uint8 )。这意味着a是指向uint8的指针。好的,现在从uint8 向右移动,然后你回到a,这意味着你不能再向右移动,所以去吧,那就是你*,这是解除引用a。因此,对于该行,存储在地址a的uint8被设置为b的值。

  2. 好的第二部分我认为func((unsigned short *) &b)是他们开始定义函数体的地方吗?如果是这种情况,那么对于函数体而言,传入的参数用作指向unsigned short的指针,但是如果像这样调用函数,我认为编译器不会因为函数类型不匹配而感到高兴期待unsigned char *而不是unsigned short *