繁体   English   中英

如何通过C(C11)中的函数将二维数组中的行元素分配给一维数组?

[英]How can I assign the elements of a row in a 2D array to a 1D array through a function in C (C11)?

我正在尝试编写一个函数,将二维数组中的行元素分配给一维数组。

我已经将我的函数写为:

void storage_position_particle(double position_particle_stored[NUMBER_SPATIAL_DIMENSIONS],
                               double *positions_particles_list[NUMBER_SPATIAL_DIMENSIONS]) {
    int index_spatial_dimension;

    for (index_spatial_dimension = 0;
         index_spatial_dimension < NUMBER_SPATIAL_DIMENSIONS;
         index_spatial_dimension++) {
        position_particle_stored[index_spatial_dimension] =
                *positions_particles_list[index_spatial_dimension];
    }
}

我一直在尝试使用以下方法调用该函数:

storage_position_particle(position_reference_particle,
                          &box_pointer->positions_particles[][index_reference_particle]);

CLion 将&box_pointer->positions_particles[][index_reference_particle]的空方括号标记为“预期表达式”。 这个项目是用 C11 编码的。

谁能解释一下如何优雅而正确地做到这一点? 提前感谢你们能提供的任何帮助!!!

可以通过以下方式声明和定义该函数(我正在使用您的标识符名称)

#include <string.h>

//...

void storage_position_particle( double *position_particle_stored,
                                const double *positions_particles_list,
                                size_t NUMBER_SPATIAL_DIMENSIONS )
{
    memcpy( position_particle_stored, 
            positions_particles_list, 
            NUMBER_SPATIAL_DIMENSIONS * sizeof( double ) );
}

要调用该函数,无需将整个二维数组或指向数组的指针数组作为第二个参数传递。 您需要的是仅传递一个“行”,例如使用下标运算符。

例如,如果您有数组

double a[NUMBER_SPATIAL_DIMENSIONS];

double b[NUMBER_SPATIAL_DIMENSIONS][NUMBER_SPATIAL_DIMENSIONS];

然后可以像这样调用该函数

storage_position_particle( a, b[i], NUMBER_SPATIAL_DIMENSIONS );

其中i表示二维数组中的行号。

Re &box_pointer->positions_particles[][index_reference_particle] :你不能那样做。 这看起来像是试图将数组的一列提取为新数组。 C 没有任何功能。

在表达式中使用时,下标运算符[ … ]必须在其中包含表达式。 因此编译器告诉你它需要一个表达式。 (在声明符中,方括号可能是空的,表示某物是一个大小未公开的数组。)

要复制一列,您需要重写storage_position_particle以接受二维数组并让它遍历元素的各个分配。

一种方法是:

void storage_position_particle(double position_particle_stored[NUMBER_SPATIAL_DIMENSIONS],
                               double positions_particles_list[][NUMBER_SPATIAL_DIMENSIONS],
                               int index_reference_particle) {
    int index_spatial_dimension;

    for (index_spatial_dimension = 0;
         index_spatial_dimension < NUMBER_SPATIAL_DIMENSIONS;
         index_spatial_dimension++) {
        position_particle_stored[index_spatial_dimension] =
                positions_particles_list[index_spatial_dimension][index_reference_particle];
    }
}

然后您将使用storage_position_particle, destination, box_pointer->positions_particles, index_reference_particle)调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM