C++如何通过指针实现二维数组b的第二列与a的第二列实时同步
错误原因分析
你原有写法存在两个核心问题:
a[x][1]本身就是int16_t类型的数值,不是指针,对它执行*解引用属于语法错误,无法正常编译。- 你定义的
b是存储int16_t值的二维数组,初始化阶段只是把a对应位置的值拷贝到b的存储空间,两个数组内存完全独立,后续修改a自然不会对b产生影响。
可选实现方案
方案1:指针实现自动同步
如果希望修改a的第二列后b无需手动操作就能自动同步,可以调整b的类型,将第二列直接指向a对应元素的内存地址:
#include <stdint.h> int16_t a[3][2] = { {30, 40}, {31, 41}, {32, 42} }; // b的元素为int16_t指针类型,第一列存常量的地址,第二列直接指向a对应元素 int16_t* b[3][2] = { {&(int16_t){50}, &a[0][1]}, {&(int16_t){51}, &a[1][1]}, {&(int16_t){52}, &a[2][1]} };
使用时只需对元素加*取值即可:*b[0][0]对应值50,*b[0][1]直接取a[0][1]的实时值,修改a的第二列后b对应位置会自动同步更新。
方案2:同步函数适配原有类型
如果你不想修改b的原有int16_t二维数组类型,无需调整现有使用b的代码,可以封装同步函数,每次修改a的第二列后手动调用一次即可完成同步:
#include <stdint.h> int16_t a[3][2] = { {30, 40}, {31, 41}, {32, 42} }; int16_t b[3][2] = { {50, 40}, {51, 41}, {52, 42} }; // 同步b的第二列与a的第二列,行数可根据实际需求调整为参数传入 void sync_b_col2() { for(int i = 0; i < 3; i++) { b[i][1] = a[i][1]; } }
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

