当前位置:编程学习 > C/C++ >>

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

 

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

 

 

#include <iostream> 

#include <cstring> 

#include <malloc.h> 

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<<strlen(str)<<endl; 

    cout<<str<<endl; 

    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<<str<<endl; 

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

                                                //掉了,就内存泄漏 

    return 0; 

 

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

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

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

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

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

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

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

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

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

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

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

 

摘自 wudemiao的专栏

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,