我写了一个函数,它返回一个指向一维数组的指针。函数原型为:
double* NameFunction (int,double*,double*)
该功能似乎适用于 1D 数组。
问题是:我想使用该函数填充 2D 数组的一行。
如何在调用函数中编写指向要填充的 2D 数组行的指针?
我可以使用相同的指针结构来指示 2D 数组的一行作为参数吗?
只需传递 2D 数组的名称并填写第一个索引:
NameFunction (12121212,&array[0],some pointer here) // for example if you want to pass the first row
在 C 中指向数组的变量总是只包含一个地址位置,即指向数组开头的指针。因此,无论数组类型如何,它只需要一个指针,即 *。所以这个函数应该像现在一样工作。
但是您可能需要更改一些编程逻辑。
您可以将double foo[20]
作为 1×20 数组,也可以将其视为二维 4×5 数组。然后你有这样的坐标:
foo foo+1 foo+2 foo+3 foo+4
foo+5 foo+6 foo+7 foo+8 foo+9
foo+10 foo+11 foo+12 foo+13 foo+14
foo+15 foo+16 foo+17 foo+18 foo+19
因此,如果您有一个返回 double *
的函数,则可以foo + 5*n
传递它(或使其返回)以指向第 n
行。
#define ROW_LEN 5
#define ROWS 4
void fillRow(double * row)
{
int i;
for (i = 0; i < ROW_LEN; i++)
{
row[i] = 12;
(row + i) = 12; // this is the same thing written differently
}
}
double arr[ROW_LEN * ROWS];
fillRow(arr + 2 * ROW_LEN); // fill third row
请注意,C 根本不执行任何范围检查,因此如果您不小心和意外地在代码中的某处arr[627] = 553
,它将盲目覆盖内存中计算地址中的所有内容。