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事事如意