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

    技术2022-05-19  29

    字符指针的用法1. char *p = "aksdjfas";   cout<<p;   结果为:aksdjfas   cout<<*p;   结果为:a   cout<<*(p+2);   结果为:s   cout<<(p+2);   结果为:sdjfas2. 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申请空间的首地址,虽然那块空间已经被释放掉了


    最新回复(0)