指针常错点(野指针,类型不同,未赋初始值)-将数组a中的n个整数按相反顺序存放。

本文通过一个将数组元素按相反顺序存放的C语言代码实例,分析了三个常见的指针错误:1) 野指针未赋初始值;2) int *与int类型的混用;3) 忽视指针变量地址变化的影响。通过这个简单的例子,强调了理解和正确使用指针的重要性。
摘要由CSDN通过智能技术生成
#include<stdio.h>
void inv(int * a,int n);
int main()
{

	int i;
    int	a[10]={1,2,3,4,5,6,7,8,9,10};
	inv(a,10);
	for(i=0;i<10;i++)
	{
		printf("%d ",a[i]);
	}

	return 0;
}
void inv(int * a,int n)
{
	int * i,* j,* m;
	int temp;
	i=a;
    j=a+n-1;
	m=a+(n-1)/2;
	for(;i<=m;i++,j--)
	{temp = * i;* i = * j;* j = temp;}
}

以上是正确代码,在此基础上标注易错点
错误1:野指针,未赋初始值

void inv(int * a,int n)
{
	int * i,* j,* m;
	int * temp;//指针未赋初始值,野指针
	i=a;
    j=a+n-1;
	m=a+(n-1)/2;
	for(;i<=m;i++,j--)
	{* temp = * i;* i = * j;* j = * temp;}
	/*就算对temp赋值,也没有权限读取temp所指的内存单元,故对*j赋值失败*/
}

错误2:int * 和int 混乱使用

void inv(int * a,int n)
{
	int * i,* j;
	int temp;
	i=a;
    j=a+n-1;
	for(;i<=(n-1)/2;i++,j--)/*本意是i的变化在0-4,但int * 和int  无法比较,同时i是在a的基础上变化。所以i<=a+(n-1)/2就对了*/
	{temp = * i;* i = * j;* j = temp;}
}

错误3:
不管主函数最后对数组a的输出,我们在inv函数中添加一个输出,犯的错误是没有管 i 的地址的变化想当然使用。

void inv(int * a,int n)
{
	int * i,* j,* m;
	int temp;
	i=a;
    j=a+n-1;
	m=a+(n-1)/2;
	for(;i<=m;i++,j--)//i=a+4后退出循环
	{temp = * i;* i = * j;* j = temp;}
	//以下是添加的一个输出
	/*由于i已经加到i=a+4了,未重新指定i所指起始地址,i将会从上一个循环的i的最终值a+4继续这次循环,输出a+4到a+9的各元素后退出循环。在这次循环条件内再次赋值i=a即可。即for(i=a;i<a+n;i++)*/
	for(;i<a+n;i++)
		printf("%d ",*i);
}

用这个比较简单的例题来反馈这些问题,课本的例题还是挺好的,循循渐进。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值