【问题标题】:Can array size or index be passed to a function along with the array in c?数组大小或索引可以与c中的数组一起传递给函数吗?
【发布时间】:2021-04-01 09:53:35
【问题描述】:

我想将一个数组的子数组之一传递给 C 中的函数。 这是函数调用的样子:

func(arr[cnt][]);

该函数的语法如下:

int func(int* arr[x][])
{
//function body
}

由于我遇到了很多错误,我很想知道这是否可能。还有在传递数组时我应该注意什么(这里:二维)

【问题讨论】:

  • 请提供更完整的函数func()的使用源代码示例特别是数组arr[]的定义是什么?
  • 是的,您可以将尺寸传递给函数。
  • 是的,把它放在第二个参数中
  • 如果您改用向量,向量的大小可以立即作为vectorname.size()获得
  • 好吧,func(arr[cnt][]); 不是一个有效的函数调用,因为arr[cnt][] 不是一个有效的表达式。 int func(int* arr[x][]); 不是有效的函数原型,因为int *arr[x][] 不是有效的参数声明。

标签: arrays c multidimensional-array


【解决方案1】:

不,您不能将数组大小作为数组的一部分传递,但您可以在使用数组衰减时将其作为第二个参数传递。在 C 语言中,让一个二维数组衰减为一个指针到指针是很常见的。

/* arr is an array of 6-element-arrays, max_arrays is the number of arrays in arr */
int func(int *arr[6], size_t max_arrays);

或者

struct array {
    /* points to array[6] */
    int (*data)[6];
    size_t num_arrays;
};


int array_data[5][6] = {0};

struct array array1_desc =
{
    .data = array_data,
    .num_arrays = 5
};

int func(struct array *array){
    assert(array != NULL);

    int a = 4;
    int b = 5;

    assert(a < array->num_arrays);
    assert(b < 6);


    /* access one element */
    array->data[a][b] = 0;

    return 0;
}

int main(int argc, char *argv[])
{
    /* array descriptor direct assignment */
    struct array array2_desc;

    array2_desc = array1_desc;

    func(&array1_desc);
    func(&array2_desc);


    return 0;
}

【讨论】:

    【解决方案2】:

    如果您将数组的维度作为附加参数传递,您可以将这些维度用作数组参数的维度。例如:

    int func(int x, int y, int arr[x][y])
    {
       ...
    }
    

    你会这样称呼它:

    int arr[4][5];
    int rval = func(4, 5, arr);
    

    【讨论】:

    • 可能值得一提的是int func(int x, int y, int arr[x][y])将被调整为int func(int x, int y, int (*arr)[y])
    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多