当前位置: 首页 > article >正文

C语言一维数组与指针运算

今天来着重讲解一下指针运算的方法遍历一维数组

基本原理

数组就是第一个数的地址,等价于一个指针,但是是开辟了空间的

我就可以除了数组 [ ] 写法操作,也可以用指针指着操作,这里语法也十分重要,通过一道题咱们都领略一遍指针运算

例题

任务描述
本关任务:编写程序,用指针实现以下功能,交换数组a和数组b中的对应元素,要考虑到数组a和数组b中数据元素的个数不同。

#include<stdio.h>
#define N 20
int main()
{
    int a[N]={ 0 }, b[N]={ 0 },temp;
    int anum,bnum;
    int *pi, *pj;
    /********** Begin *********/    
    

    
    /********** End **********/
}

 思路

这里有个问题,我们知道这两个数组实际长度可能不一样,比如a数组10个数字,b数组5个数字,这怎么交换?(这里的交换是逐个元素的交换,别直接数组交换,要不就没有难度了,不符合题干)

有一个思路,先交换公共部分,然后记住换到哪里了,接着继续把长的多出来的换到短的里,再把长的一部打印出来(不全部打印),这就是数学取交集的应用(死去的高中知识)

接下来就是相关实现

#include<stdio.h>
#define N 20
int main()
{
    int a[N]={ 0 }, b[N]={ 0 },temp;
    int anum,bnum;
    int *pi, *pj;
    /********** Begin *********/    
    scanf("%d",&anum);   //输入数组a元素个数
    for(pi=a;pi<a+anum;pi++)
    {
        scanf("%d",pi);
    }
    scanf("%d",&bnum);   //输入数组b元素个数
    for(pj=b;pj<b+bnum;pj++)
    {
        scanf("%d",pj);
    }
        
    /***** 交换两个数组a和b的值*****/
    for(pi=a ,pj=b;  pi<a+anum && pj< b+bnum; pi++, pj++)
    {
        temp =*pi;
        *pi = *pj;
        *pj = temp;
            
    }
    while( pi<a+anum)
    {
        *pj =*pi;
        pi++;
        pj++;
    }
    while( pj<b+bnum)
    {
        *pi =*pj;
        pj++;
        pi++;
    }
    temp = anum; 
    anum = bnum;
    bnum = temp;

    for( pi=a; pi<a+anum; pi++)
    {
        printf("%d ",*pi);
    }
    printf("\n");
     for( pi=b; pi<b+bnum; pi++)
    {
        printf("%d ",*pi);
    }
    
     return 0;
    /********** End **********/
}

 语法讲解

经典拿自己开刀

pi<a+anum就是等价于pi[i]<a[anum],但是指针写法不需要变量i

pi++等价于pi[i],i++,指针写法不需要变量i

scanf("%d",pi)等价于canf("%d",&pi[i]),这里注意,指针就是地址,不需要&

pi=a/pj=b也是重点,一定注意指针等于指针(数组名),所以不要额外添加 [ ]

for循环里面是交换公共部分

交换完之后,指针位置变化成下图

进行额外值录入

temp = anum; 
anum = bnum;
bnum = temp;

交换要读取的数组长度

总结

1、十分重要的指针运算语法

2、交换

3、针对长度不同的数组如何逐项交换(换交集取多项读取再限制) 

以上均是本人理解,如有不对欢迎各位大佬评论区指出~

12/31,祝各位新年快乐,2025事事如意


http://www.kler.cn/a/460269.html

相关文章:

  • 关于 PPPOE技术的详细解释
  • [算法] [leetcode-324] 摆动排序 II
  • Python 字符串定义及前缀
  • 云计算学习架构篇之HTTP协议、Nginx常用模块与Nginx服务实战
  • 【QGIS入门实战精品教程】7.3:QGIS制作千层饼(DEM+等高线+影像+TIN)
  • 欧拉-伯努利梁自由波动的频散关系
  • 《计算机组成及汇编语言原理》阅读笔记:p133-p159
  • WPF的下拉复选框多选,数据来源数据库的表
  • 【人工智能机器学习基础篇】——深入详解深度学习之神经网络基础:理解前馈神经网络与反向传播算法
  • 医疗数仓配置Flume
  • 使用maven-mvnd替换maven大大提升编译打包速度
  • sublime 文件高亮设置
  • vim编辑器实用设置
  • VirtualBox新版本报错 Invalid installation directory解决方案
  • C#封送类
  • Tesseract-OCR 文字识别
  • 【Spring】Spring DI(依赖注入)详解—自动装配—byType实现原理
  • 智元与汇川加码,机器人如何利好电机市场?
  • Sigrity System SI SerialLink模式进行HDMI2协议仿真分析操作指导-TP1
  • AI安全的挑战:如何让人工智能变得更加可信
  • 【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作
  • 图像处理-Ch7-小波函数
  • 开源大数据平台E-MapReduce
  • 【广州计算机学会、广州互联网协会联合主办 | ACM独立出版 | 高录用】第四届大数据、信息与计算机网络国际学术会议(BDICN 2025)
  • 【电路理论四】正弦电流电路
  • 前端经典面试合集(二)——Vue/React/Node/工程化工具/计算机网络