前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针叠加会不断改变指针指向

指针叠加会不断改变指针指向

作者头像
大忽悠爱学习
发布2021-03-02 14:29:42
4580
发布2021-03-02 14:29:42
举报
文章被收录于专栏:c++与qt学习
在这里插入图片描述
在这里插入图片描述

下面是错误的代码演示:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void test()
{
	//指针叠加会不断改变指针指向
	//指针p一开始指向堆区开辟内存的首地址
	char* p = (char*)malloc(sizeof(char)*20);
	char buf[] = "hello";
	int len = strlen(buf); //包含\0
	for (int i = 0; i < len; i++)
	{
		//每次循环都会在堆区开辟的内存从内存首地址开始往后连续存储,指针p的指向也在不断改变
		*p = buf[i];
		//指针p每次+1,是根据char类型推导出每次加上一个字节的长度
		p++;//修改原来指针的指向
	}
	if (p != NULL)
		free(p);//会报错
}
int main()
{
	test();
	return 0;
}
在这里插入图片描述
在这里插入图片描述

解决方法:创建临时指针操作内存,防止出错

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void test()
{
	//指针叠加会不断改变指针指向
	//指针p一开始指向堆区开辟内存的首地址
	char* p = (char*)malloc(sizeof(char)*20);
	char buf[10] = "hello";
	int len=strlen(buf); //包含\0
	//解决方法:创建临时指针操作内存,防止出错
	char* pp = p;
	for (int i = 0; i < len; i++)
	{
		//每次循环都会在堆区开辟的内存从内存首地址开始往后连续存储,指针p的指向也在不断改变
		*pp = buf[i];
		//指针p每次+1,是根据char类型推导出每次加上一个字节的长度
		pp++;//修改原来指针的指向
	}
	if (p != NULL)
	{
		free(p);
		p = NULL;
		pp = NULL;
	}

}
int main()
{
	test();
	return 0;
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档