C 编程:指向 2D 数组行的指针



我写了一个函数,它返回一个指向一维数组的指针。函数原型为:

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,它将盲目覆盖内存中计算地址中的所有内容。

相关内容

  • 没有找到相关文章

最新更新