关于C语言指针中的p++与p+i

本文深入探讨了C语言中指针与数组的关系,通过具体示例解释了如何利用指针进行数组元素的读写操作,包括输入输出、求平均分及筛选高于平均分的元素。对比了使用p++与p+i的不同,展示了后者在循环处理数组时的效率优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看一组代码:

#include <stdio.h>
void main()
{
	int i,*p,a[7];
	p=a;
	for(i=0;i<7;i++)
		scanf("%d",p++);
	printf("\n");
	for(i=0;i<7;i++,p++)
		printf("%d",*p);
}

 我们输入7个数,但输出的结果却是随机数。产生的原因为程序执行完第一组for循环后,指针已经指到了数组后的内存单元,如果想要输出该数组元素,则需重新将其首地址赋值给p(p=a)。

以下是改正的版本————————————————

当然我们还可以将p++替换为p+i;以下为参考代码————————————————

#include <stdio.h>
void main()
{
	int i,*p,a[7];
	p=a;
	for(i=0;i<7;i++)
		scanf("%d",p+i);
	printf("\n");
	for(i=0;i<7;i++)
		printf("%3d",*(p+i));
}

 其好处是从第二次循环后都不需要重新将指针指回数组首元素。

方法a[0]地址a[1]地址a[i]地址
通过数组元素名a[0]a[1]a[i]
通过数组名a*a*(a+1)*(a+i)
通过指针变量p*p*(p+1)*(p+i)
下标法p[0]p[1]p[i]

因为p指向a的首地址,即a[0],所以a[i]=>*(a+i)=>*(p+i)。

下一题用p+i有明显的优势————————

输入十名学生成绩,计算平均分,输出高于平均分的成绩,使用指针完成该操作。

我们先用p++,可以看到每循环一次都得重置p=a;

#include <stdio.h>
void main()
{
	int a[10],sum=0,*p,i;
	float v;
	p=a;
	for(i=0;i<10;i++,p++)
		scanf("%d",p);
	p=a;
	for(i=0;i<10;i++,p++)
		sum+=*p;
	v=sum/10;
	printf("%f\n",v);
	p=a;
	for(i=0;i<10;i++,p++)
		if(*p>v) printf("%3d",*p);
}

 而用p+i的话则不需要————————————

#include <stdio.h>
void main()
{
    int a[10],*p,i,sum=0;
    float v;
    p=a;
    for(i=0;i<10;i++)
        scanf("%d",p+i);
    for(i=0;i<10;i++)
        sum+=*(p+i);
    v=sum/10;
    printf("%f\n",v);
    for(i=0;i<10;i++)
        if(*(p+i)>v) printf("%3d",*(p+i));
}

 

转载于:https://www.cnblogs.com/ssh-007/p/4419111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值