对于计算机科学课,我有以下任务。
给定一个包含128行和32列的二维二维数组。通过将列彼此相继放置在存储器中来存储阵列。完成以下函数,该函数返回给定指向数组第一个元素的指针的正确元素,以及一些列和行值。
#define N_COLUMNS 32
#define N_ROWS 128
static inline double get_element(const double *A, const int row, const int column)
{...
}
这是我到目前为止所做的,但我不认为这是正确的。
return *A + column * sizeof(double) + row * sizeof(double);
有人能帮助我吗?
答案 0 :(得分:6)
根据我的理解,假设从零开始索引,可以通过使用指针算法获得所需的结果。
return *( A + ( column * N_ROWS ) + row );
此处sizeof(double)
不需要使用,因为A
是适当的类型。添加到它将比{sum}提前sizeof(double)
倍。
答案 1 :(得分:1)
尝试A + column_number * column_size + row_number
记住数组从第0列第0行开始,以便于计算
答案 2 :(得分:0)
return语句看起来像
return *( A + column * N_ROWS + row );
事实上,你有一个一维数组存储N _COLUMNS * N_ROWS
个元素,这些元素被分成N_ROWS
个元素组。
考虑到不需要使用带参数row和column的限定符const
这些函数声明
static inline double get_element(const double *A, const int row, const int column);
和
static inline double get_element(const double *A, int row, int column);
是等效的,并声明相同的一个函数。