这样的事情:
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的内容?
答案 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;
}
。