欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > C语言一维数组与指针运算

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

2025/1/3 16:10:12 来源:https://blog.csdn.net/dyudbegdu/article/details/144858494  浏览:    关键词: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事事如意

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com