HJ35蛇形矩阵

文章讲述了作者在使用C语言处理HJ35蛇形矩阵时遇到的问题,涉及动态数组创建、内存管理(特别是memset)、指针数组和数组越界。通过实验和调整,作者最终解决了动态二维数组的正确创建和打印问题。
摘要由CSDN通过智能技术生成

提示:文章

文章目录

前言

前期疑问:
本文目标:


一、背景

最近

二、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


总结

未完待续

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值