如何用指针给10×10二维数组加载0-99连续数并实现行操作
原代码问题
原有代码的赋值逻辑仅使用了内层循环变量q,导致每一行的10个元素都是09重复,因此无法输出099的连续值,修改赋值逻辑为p * 10 + q即可解决该问题。
完整实现代码
#include <stdio.h> // 对应要求c:输出单行内容的函数 void printSingleRow(int *rowHead, int colCount) { for (int i = 0; i < colCount; i++) { printf("%d\t", rowHead[i]); } printf("\n"); } int main() { // 1. 创建10×10二维整数数组 int z[10][10]; int *myPtr2 = &z[0][0]; // 对应要求b:指向行的指针索引,可通过rowIdx[n]定位第n行首地址 int (*rowIdx)[10] = z; int p, q, temp; // 对应要求a:使用指针加载0~99连续整数 for (p = 0; p < 10; p++) { for (q = 0; q < 10; q++) { *myPtr2 = p * 10 + q; myPtr2++; } } // 对应要求d:输出交换前的整个数组 printf("===== 交换前数组内容 =====\n"); for (int i = 0; i < 10; i++) { printf("第%d行:", i); printSingleRow(rowIdx[i], 10); } // 对应要求e:交换第0行与第9行、第3行与第4行内容 // 交换第0行和第9行 for (int i = 0; i < 10; i++) { temp = rowIdx[0][i]; rowIdx[0][i] = rowIdx[9][i]; rowIdx[9][i] = temp; } // 交换第3行和第4行 for (int i = 0; i < 10; i++) { temp = rowIdx[3][i]; rowIdx[3][i] = rowIdx[4][i]; rowIdx[4][i] = temp; } // 对应要求f:输出交换后的整个数组验证结果 printf("\n===== 交换后数组内容 =====\n"); for (int i = 0; i < 10; i++) { printf("第%d行:", i); printSingleRow(rowIdx[i], 10); } return 0; }
实现说明
- 赋值逻辑修改为
p * 10 + q后,指针遍历整个二维数组的内存空间时,会依次写入0到99的连续数值 - 行指针
int (*rowIdx)[10]的类型和二维数组行地址类型匹配,可直接通过下标定位任意一行的首地址 - 行交换操作通过遍历行内每个元素完成交换,验证输出时可看到第0行和第9行、第3行和第4行内容已互换
内容的提问来源于stack exchange,提问作者Maikayla
相关产品推荐
相关产品推荐

