指针基础之字符串与堆区

指针基础之字符串与堆区

一.指针与字符串

	第一种形式:char *s="hello world"
		定义一个字符指针进行初始化
		这个操作是在静态区 申请了一块空间 制作伪常量(只读变量),只能读不能写,否则会报错
	第二种形式:char arr[]="hello world"
		定义一个字符数组进行初始化
	s存储在静态区   arr存储在栈区
	对于只能访问不能修改的区域  写操作会导致段错误或总线错误
	如*s=‘t’;scanf("%s",s);会导致错误
	而char *s1=arr;可以读写

二.堆区的概念

	1.在堆区申请一块内存,可以用于数据存放
	2.堆区的内存需要手动管理 即释放,如果申请的内存没有释放,会导致内存泄漏
	3.返回值为void *类型,参数为需要申请的内存字节大小
		void *类型是一个空指针类型,其可以表示可以使用任何数据类型,所以也称为万用指针
		对于void*使用一定要进行强转
	char *str=(char *)malloc(1024); 
		char 类型的指针申请一块1024字节的堆区空间,malloc返回值为void* 所以要强制转换为char*
	free(str);
		free 是对申请空间的释放操作的函数,这块空间可以供其他变量申请
		注:此时str仍指向了这块区域此时是野指针非法访问
	char *str1;
		此时该指针未进行初始化,其内部可能存放的是一个地址数据,如果查找该地址,就会导致非法访问
		如果该区域是不可访问的区域就会导致程序崩溃(段错误或总线错误)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值