提示:文章
文章目录
前言
前期疑问:
本文目标:
一、背景
最近
二、HJ35蛇形矩阵
2.1 代码
思路是先创建二维数组,在二维数组中写入数据,再按照蛇形打印。
但是创建二维数组就出了问题。
2.1.1 首先是创建静态二维数组
首先是创建静态二维数组,数组行列为变量值,这样是可以创建的,但是当将二维数组作为指针数组传参的时候,要写列值。所以感觉不能写成静态数组。
2.1.2 创建动态数组
创建动态数组竟然出错了。。
2.1.2.1 第一版:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printArray(int** array, int len)
{
for(int i = 0; i < len; i++)
{
for(int j = 0; j < len; j++)
{
printf("%d ", *((*array + i) + j));
}
printf("\n");
}
}
int main()
{
int num = 0;
while(scanf("%d", &num) != EOF)
{
//int array[num][num];
printf("%d\n", num);
int **array = (int**)malloc(sizeof(int*) * num);
for(int i = 0; i < num; i++)
{
array[i] = (int*)malloc(sizeof(int) * num);
}
memset(array, 0, sizeof(array));
printArray(array, num);
}
return 0;
}
上述代码异常
2.1.2.2 第二版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printArray(int** array, int len)
{
for(int i = 0; i < len; i++)
{
for(int j = 0; j < len; j++)
{
printf("%d ", *((*array + i) + j));
}
printf("\n");
}
}
int main()
{
int num = 0;
while(scanf("%d", &num) != EOF)
{
//int array[num][num];
printf("%d\n", num);
int **array = (int**)malloc(sizeof(int*) * num);
for(int i = 0; i < num; i++)
{
array[i] = (int*)malloc(sizeof(int) * num);
memset(array[i], 0, sizeof(int) * num);
}
printf("%d \n", array[0][0]);
// memset(array, 0, sizeof(array));
printArray(array, num);
}
return 0;
}
//4
//4
//0
//0 0 0 0
//0 0 0 1098707198
//0 0 1098707198 21721
//0 1098707198 21721 1982216
动态二维数组创建成功,但是memset没实现,原因不确定
现在已经确定原因了,打印的异常数据不是因为没有memset成功,而是打印访问数组越界导致的问题。至于为什么
printf("%d ", *((*array + i) + j));
写法会出问题,需要再研究
详细说明参考文章二维数组
2.1.2.3 第三版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printArray(int** array, int len)
{
for(int i = 0; i < len; i++)
{
for(int j = 0; j < len - i; j++)
{
printf("%d ", *(*(array + i) + j));
//printf("%d ", array[i][j]);
}
printf("\n");
}
}
int main()
{
int num = 0;
while(scanf("%d", &num) != EOF)
{
int **array = (int**)malloc(sizeof(int*) * num);
for(int i = 0; i < num; i++)
{
array[i] = (int*)malloc(sizeof(int) * num);
memset(array[i], 0, sizeof(int) * num);
}
int count = 0;
for(int i = 0; i < num; i++)
{
for(int j = i; j >= 0; j--)
{
array[j][i - j] = ++count;
}
}
printArray(array, num);
}
return 0;
}
这版成功了
2.2
三、
3.1
总结
未完待续