【C语言】指针的经典且简单的案例分析

本文介绍了C语言中指针的应用,包括如何利用指针实现奇数阶幻方,通过指针寻找变量在内存中的位置,以及用指针实现快速排序算法。对于初学者,理解指针在这些场景中的作用有助于深化对C语言的理解。
摘要由CSDN通过智能技术生成

提示:本文仅供C语言初学者参考使用,文章代码部分来源网络,如有侵权,请尽快私信删除!


前言

提示:为加深对C语言中指针的理解,分析了几道C语言指针的经典案例,一起来看看吧!


提示:以下是本篇文章正文内容,下面案例可供参考

一、幻方

案例简介:
它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行同一列同一对角线上的几个数的都相等。
编写程序,实现奇数阶的幻方(偶数阶的算法非常难,博主能力有限,暂不做讨论。感兴趣的读者可以查阅中南大学信息科学与工程学院某教授和研究生撰写的论文)

这个游戏相信小时候大家都玩过,就算没有,数独总该玩过吧?懂得都懂,不懂的返回上一级读题

各位读者看到这里请先自己思考一下子该如何编写程序。

我把最简单最易懂的思路贴在下面

⑴ 将1放在第一行中间一列;
⑵ 从2开始直到n×n为止各数依次按下列规则存放:
按 45°方向行走,如向右下.
每一个数存放的行比前一个数的行数减1,列数加1
⑶ 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最上一行,列数同样加1;
⑷ 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,
则把下一个数放在上一个数的上面。

闲话少叙,直接贴代码!

//函数声明
void array();
/* 在C语言当中,使用函数时如果写的函数放在了主函数的前面,不需要进行函数声明,如果写在主函数后面,必须加上函数的声明! */
//主函数
int main() {
   
    array();          //函数调用
    return 0;
}
/* 把执行的代码打包成函数,以便拥有更好的可移植性 */ 
void array() 
{
   
    int n, i, j, idx, num, MAX;
    int* M;           //定义一个一维数组指针,按行优先存储矩阵中的元素
    /* 一维数组的数组名就是该一维数组的首地址,而指针刚好指向首地址,因此可以定义指针来表示一维数组 */
    printf("请输入n:");
input:                //***
    scanf("%d", &n);
    if (n%2==0)       //n是偶数则重新输入
    {
   
        printf("n不为奇数,请重新输入:");
        goto input;
    }
    /* goto :goto语句是一种无条件转移语句,与:构成C语言
    中的关键词。如上述代码,进入if语句后goto input 会无条
    件返回到 *** 的位置。*/
    MAX = n * n;      //MAX为幻方中的最大值,也是元素个数,想想为什么?这点很重要!
    M = (int*)malloc(sizeof(int) * MAX);  //分配存储空间
/*想真正的玩指针必须要会的一个函数。 这个mal
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何不忆江南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值