如何将双指针类型参数作为2D数组访问?

时间:2015-12-17 12:19:38

标签: c arrays

这样的事情:

struct s
{
    int a;
    int b;
}

void f(struct s **a)
{
    a[0][0].a = 0; // Access violation here
}

int main()
{
    struct s a[5][3];
    f(a);
    return(0);
}

那么如何使用2D数组表示法访问内部函数f的内容?

1 个答案:

答案 0 :(得分:2)

UPDATE table_name SET Status = DEFAULT, QCField = 'A' WHERE QCField IN ('A', 'B') 这样的数组存储着a[5][3]个实例,而struct将有条理地存储指针,使每个指针指向struct s **a的一个实例。所以struct s自动转换为指针)和struct s a[5][3]是不兼容的指针,如果你使用警告进行编译就会知道。

一个简单的解决方案是

struct s **a

更好的解决方案是

void f(struct s a[][3])
{
    a[0][0].a = 0; // Access violation here
}

正如你所说,当我说上面将存储指针时,这是因为你需要为此分配内存,你可以像上面的例子一样使用#include <stdlib.h> struct some_structure { int value1; int value2; }; void set_value(struct some_structure **array, size_t row, size_t column) { array[row][column].value1 = 0; array[row][column].value2 = 0; } int main(void) { struct some_structure **array; array = malloc(5 * sizeof(*array)); if (array == NULL) return -1; // Allocation Failure for (size_t i = 0 ; i < 5 ; ++i) { array[i] = malloc(sizeof(*(array[i]))); if (array[i] == NULL) return -1; // Allocation Failure } set_value(array, 0, 0); for (size_t i = 0 ; i < 5 ; ++i) free(array[i]); free(array); return 0; }