将数组指针作为参数传递

时间:2017-11-30 15:38:46

标签: arrays pointers parameter-passing

我正在使用我的I2C读取函数将数组指针传递给函数并从缓冲区复制数据。

现在我只是测试在代码块中传递数组的方法来查看结果。

我的问题:

  1. 数组是否在主函数中传递而没有任何正确的?
  2. 我的方法是开发函数并将数组作为指针传递一个好的代码策略吗?
  3. 这是我的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <inttypes.h>
    
    uint8_t reaArr (uint8_t len, uint8_t *data);
    
    int main(void) {
    uint8_t receive[9];
    uint8_t k;
    
    
    
    receive[9] = reaArr(9,receive);
    
    for (k=0;k<9;k++)
    {
        printf("%d\n",receive[k]);
    }
    
        return 0;
    }
    
    uint8_t reaArr (uint8_t len, uint8_t *data)
    {
    
        uint8_t arr[9]={20,55,66,33,5,4,45,27,59}, i, arrIndex = len;
        for (i=0;i<arrIndex;i++)
        {
            data[i] = arr[i];
        }
    
        return *data;
    }
    

1 个答案:

答案 0 :(得分:1)

<块引用>

从main传递给函数的数组是不是不正确?

是的,传递数组本身是正确的,但您将函数的结果分配给此处的第 10 项:receive[9] = ...。请记住,C 中的数组使用 0 索引,因此这超出了绑定。在这种情况下,您实际上不需要从函数中返回任何内容。考虑将其更改为:

void reaArr (uint8_t len, uint8_t *data);
<块引用>

我开发函数并将数组作为指针传递的方式也是一种很好的代码策略吗?

一般来说,是的,调用者分配是首选,因为这样可以将分配和算法分开。如果这个示例是一个真正的 I2C 驱动程序,那么您将从函数内部的硬件缓冲区中读取数据,而不是从本地数组中读取数据。