如何通过指针实现3×4矩阵指定数值删除后末尾补0的功能?
C++ 矩阵删除元素功能实现方案
核心问题解答
- 二维数组的指针引用:C++ 中静态二维数组
int arr[3][4]的内存是连续线性排布的,直接将数组首地址强转为int*类型后,就可以按照一维数组的指针逻辑遍历所有12个元素,不需要特殊的多维指针写法,完全满足题目要求的指针实现规则。 - 矩阵自动初始化:不需要手动逐个写入1~12的数值,通过指针遍历数组首地址开始的12个连续int空间,依次赋值即可完成初始化。
完整可运行代码
#include <iostream> #include <iomanip> using namespace std; int main() { int arr[3][4]; // 用指针自动初始化1~12,无需手动逐个赋值 int* p = (int*)arr; for (int i = 0; i < 12; ++i) { *(p + i) = i + 1; } // 输出原始矩阵 cout << "原始矩阵:" << endl; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 4; ++j) { cout << setw(4) << arr[i][j]; } cout << endl; } // 输入要删除的数值 int number; cout << endl << "请输入要删除的数值:"; cin >> number; // 用指针查找目标元素的位置 int del_pos = -1; for (int i = 0; i < 12; ++i) { if (*(p + i) == number) { del_pos = i; break; } } if (del_pos == -1) { cout << "矩阵中不存在该数值" << endl; return 0; } // 元素前移,用指针实现 for (int i = del_pos; i < 11; ++i) { *(p + i) = *(p + i + 1); } // 末尾补0 *(p + 11) = 0; // 输出处理后的矩阵 cout << endl << "处理后的矩阵:" << endl; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 4; ++j) { cout << setw(4) << arr[i][j]; } cout << endl; } return 0; }
效果验证
输入数值6时,输出结果如下:
原始矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 请输入要删除的数值:6 处理后的矩阵: 1 2 3 4 5 7 8 9 10 11 12 0
和预期效果完全一致。
内容的提问来源于stack exchange,提问作者Ali Osman
相关产品推荐
相关产品推荐

