#include <stdio.h>
int main() {
int a, b = 0;
scanf("%d %d",&a,&b);
int arr[a][b];//注意a、b的赋值一定要放在二维数组初始化之前,不妨可自行尝试
for (int i = 0;i < a;i++) {
for (int j = 0;j < b;j++) {
scanf("%d",&arr[i][j]);
}
}//二维数组的初始化
for (int i = 0; i < b;i++) {
for (int j = 0;j < a;j++) {
printf("%d ",arr[j][i]);
}
printf("\n");
}
return 0;
}
这个题我刚开始如下所写:发现运行不过去,一直重复输出一个数字,我就纳闷了!最后发现了,应该是a、b默认初始值是0,创建了一个0行0列的数组
- 内存越界后果:↓后续的循环操作实际上在访问非法内存区域↓所有数组操作都会覆盖同一块内存地址
- 核心错误点:int arr[a][b]; // 声明在scanf之前↓a和b此时为0,创建的是0×0数组
- 核心错误点:int arr[a][b]; // 声明在scanf之前↓a和b此时为0,创建的是0×0数组
#include <stdio.h>
int main() {
int a, b = 0;
int arr[a][b];//注意a、b的赋值一定要放在二维数组初始化之前,不妨可自行尝试
scanf("%d %d",&a,&b);
for (int i = 0;i < a;i++) {
for (int j = 0;j < b;j++) {
scanf("%d",&arr[i][j]);
}
}//二维数组的初始化
for (int i = 0; i < b;i++) {
for (int j = 0;j < a;j++) {
printf("%d ",arr[j][i]);
}
printf("\n");
}
return 0;
}

京公网安备 11010502036488号