【问题标题】:pointers and structures being passed through functions通过函数传递的指针和结构
【发布时间】:2014-01-30 18:48:45
【问题描述】:

这可能是一个简单的问题,但我从未遇到过类似的问题。首先让我说我在 GCC 编译器中使用标准 C 语言工作,这是针对嵌入式系统的。

我有一个结构,它包含一个平均数组、运行总和、零偏移量、比例因子、除数因子和指向平均数组的指针。基本上我是这样声明的:

typedef struct  tag_avgAry {
    int array[AVG_ARRY_LEN];
    int *start;
    int *current;
    int *end;
    long sum;
    int avg;
    int factor;
    int zero;
    int value;
    unsigned char scale;
} avgAry;

所以我的问题是这样的。我需要将使用此 typedef 创建的结构和数据变量传递给处理使用新数据更新运行平均值和数组表的函数。我已经声明了一个函数:

 void processArray(int data, avgAry array)

现在我知道我需要将 array 更改为 *array 以便我实际修改我正在传递的结构,而不仅仅是一个副本,而是我该如何然后处理作为结构一部分的指针。即,如果我的一个结构被称为 phA,那么将数字 8 存储在我将编写的结构中的数组的当前元素中:

*phA.current++ = 8;

然后将根据“开始”和“结束”指针检查“当前”指针并在需要时将其重置...但是如果我通过如下调用 processArray 函数来做到这一点...

processArray(8,(avgAry *)(&phA));

我如何引用结构中的指针,因为我的理解是在我要编写的函数中访问 phA 的 sum 元素:

*array.sum = data;

但是如果我想访问当前指针,我会写这样的东西吗?

*(*array.current)++ = data;

对不起,我已经很久没有深入了解指针和结构了...我猜我花了太多时间做 ASM。

【问题讨论】:

    标签: c function pointers structure


    【解决方案1】:

    访问数组元素的惯用方式如下

    array[0]->current += data;
    

    -> 运算符是(*theValue).theMember 的简写,是访问指针成员的首选方法。 [0] 索引器语法是访问数组元素的首选方法。直接在数组上使用* 是可以接受的,但如果你正在做指针运算

    【讨论】:

    • 这...非常多!我正在阅读 OP 问题,在完成之前就发疯了,感谢 Jared 让我恢复了理智和冷静。
    • 好的。我想我明白这一点,但在我的情况下,为了清楚起见,我的传入成员被简单地称为数组。它实际上不是一个数组,而是一个包含多个变量、指针和一个整数数组作为结构成员的结构。那么我还是会以同样的方式做,只是去掉 [0] 吗?
    • @user3221422 必须知道 array 的确切类型才能回答这个问题
    【解决方案2】:

    应该是*(*array).current,但你可以使用*array->current

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2020-07-01
      • 1970-01-01
      相关资源
      最近更新 更多