gpt4 book ai didi

c - C 语法理解 : Pointers

转载 作者:行者123 更新时间:2023-11-30 17:11:22 24 4
gpt4 key购买 nike

我对指针的使用有中等的了解。有些语法风格让我感到困惑。

喜欢:

  1. *(uint8 *) (a) = (b)
  2. 在函数中解析引用时对其进行类型转换。该函数的原型(prototype)为 func(unsigned char * a); 但它被用作 func((unsigned Short *) &b); .... 据我了解他们将预期的 char 类型指针转换为 Short。

谁能帮我理解这些语句在 C 语言中的确切含义?

最佳答案

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

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

    那么第 1 步 a 是什么?从变量的名称开始,在本例中是 a。然后查看其右侧定义的内容,这里什么都没有,因此转到紧邻右侧的部分,即 (uint8 )。这意味着 a 是一个指向 uint8 的指针。好吧,现在从 uint8 向右移动,你会回到 a,这意味着你不能再向右移动,所以向右移动,这会得到 *,这是取消引用 a。因此,对于这一行,存储在地址 a 的 uint8 值被设置为 b 的值。

  2. 好的,第二部分我认为 func((unsigned Short *) &b) 是他们开始定义函数体的地方?如果是这种情况,那么这意味着对于函数体,传入的参数被用作指向无符号短整型的指针,但是如果像这样调用该函数,我认为编译器会因为函数以来的类型不匹配而不满意需要一个 unsigned char * 而不是 unsigned Short *

关于c - C 语法理解 : Pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32356957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com