C++中如何通过指针遍历二维数组元素并实现矩阵加法
实现原理
C 语言中的二维数组采用行优先的连续内存存储规则,你定义的 2×2 矩阵所有元素会在内存中按顺序紧密排列,不存在分段,因此只要拿到首元素的指针,直接按总元素个数偏移指针就能遍历全部元素,不需要额外处理行、列的二维结构。
函数实现
按照你给出的函数定义格式,固定适配 2×2 矩阵的实现代码如下:
void D2Add(const double* a, double* b) { // 2×2 矩阵总计4个元素,循环4次遍历所有位置 for (int i = 0; i < 4; i++) { // 指针偏移i个单位,将A矩阵对应元素加到B矩阵的相同位置 *(b + i) += *(a + i); } }
调用方法
你完成初始化后直接调用函数即可,运行后B矩阵会直接存储A+B的结果:
const double A[2][2]={{1,2},{3,4}}; double B[2][2]={{4,3},{2,1}}; const double* a=*A; double* b=*B; // 调用加法函数 D2Add(a, b);
通用扩展(支持任意尺寸矩阵)
如果需要函数适配不同行列数的矩阵,可以补充行列数作为入参,修改后更灵活的实现如下:
void D2Add(const double* a, double* b, int rows, int cols) { int total_ele = rows * cols; for (int i = 0; i < total_ele; i++) { *(b + i) += *(a + i); } } // 2×2 矩阵调用示例:D2Add(a, b, 2, 2);
内容的提问来源于stack exchange,提问作者Chrsi
相关产品推荐
相关产品推荐

