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

发布于:2025-02-11 ⋅ 阅读:(69) ⋅ 点赞:(0)

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

基本原理

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

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

例题

任务描述
本关任务:编写程序,用指针实现以下功能,交换数组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事事如意


网站公告

今日签到

点亮在社区的每一天
去签到