字符指针的用法
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申请空间的首地址,虽然那块空间已经被释放掉了