字符串的使用及malloc,free的知识

本文深入解析字符指针的使用方法,包括直接输出与间接输出的区别、常见错误示例及动态内存管理技巧。通过实例演示如何正确操作字符指针,帮助读者理解指针的工作原理。

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

字符指针的用法
1. char *p = "aksdjfas";
   cout<<p;
   结果为:aksdjfas
   cout<<*p;
   结果为:a
   cout<<*(p+2);
   结果为:s
   cout<<(p+2);
   结果为:sdjfas
2. char *p;
   输入为:cin>>p;  //这样是错误的,因为没有给p初始化,p没有地址,所以不能直接输入
   可以定义一个字符数组,再把指针指向这个字符数组
   char cp[10];
   p = cp;
   cin>>cp;
3.cout<<p与 cout<<*p的区别是:p是字符串的首地址,输出时从这个首地址开始输出,而*p是首元素
  所以cout<<*(p++)到最后输出的是'/0', cout<<p++最后输出的是NULL,两者其实效果上是等价的,所以一般我们对
  字符串处理的时候判断是否到最后一个元素可以用while(*(p++)).
4.while(*p++)==while(p[i++]) (i=0)  但是不等于while(p++) 因为p++是地址

****************************************************************************************************
 char   *pt1,*pt2;
    pt1=(char   *)malloc(100);
    pt2=pt1;
    free(pt1);
    pt1=NULL;
    return   0;

以上是楼主的主程序,
        第一行定义两个字符指针,但没有赋初值,编译器只给pt1、pt2个分配两个字节的存储空间来存储字符指针(指针也是一种变量,近程指针占两个字节),其中的数值不清楚,即是pt1、pt2指向那里是不可预知的
        第二行用malloc函数为动态申请一个连续空间,并将这个快连续空间的首地址赋给pt1,pt1指向动态申请的内存块
        第三行将pt1的内容pt2,两者同时指向动态申请的内存快
        第四行释放pt1所指向的内存空间,显然将pt2所指向的空间也释放了,因为他们指向同一空间,但是指针变量所存储的数据不变,即pt1/pt2仍然指向原来的空间
        第五行后,pt1=‘/0 ',但是pt2还是指向malloc申请空间的首地址,虽然那块空间已经被释放掉了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值