C/C++--关于指针的一些开辟和赋值

2014-11-24 12:34:44 · 作者: · 浏览: 0

今天写个代码,一直报错本来就是解个字符串的左旋问题,可是老报错,都快烦死了,后来在网上的到热心的网友的解答,豁然开朗!呵呵,,现在贴出来大家一起学习!

#include

#include

#include

using namespace std;

int main()

{

char *str=(char *)malloc(20*sizeof(char)); //给指针开辟内存第一种方法

//char a[20]; //给指针开辟内存第二种方法

//str=a;

//str=new char[20]; //给指针开辟内存第三种方法

//str="wudemiao"; //给指针赋值第一种方法

strcpy(str,"wudemiao"); //给指针赋值第二种方法(注意区别)

cout<

cout<

int N=strlen(str);

int M=4;

char ch;

while(M--){

ch=str[N-1];

for(int i=N-1;i>0;i--)

{

str[i]=str[i-1];

}

str[0]=ch;

}

cout<

//delete str; //如果使用的第三种方法,千万别掉了

//掉了,就内存泄漏

return 0;

}

//需要解释一下的是,在我们为指针开辟内存时的上面说道

//的三种方法中,要注意的是记得使用delete str;避免内

//存泄漏。如果使用的是str="wudemiao";为这一句你把str

//指针指向一个字符串常量,上一句创建的那20个字符串现

//在已经访问不到了,这是内存泄露 很严重的问题。后面又

//通过str指针去修改它引用的常量的常量,常量肯定是不能

//修改的,所以就出错了。但是使用strcpy(str,"wudemiao");

//strcpy()则生成了一个副本,这个副本是一个数组,自然

//是变量,所以无论你用哪种方法给指针开辟内存,如果你

//使用的是str="wudemiao"的话,那么str指向的就是一个字

//符常量,无论在C/C++中都是不能改变常量的值的。

摘自 wudemiao的专栏