美文网首页
数组赋给数组

数组赋给数组

作者: calm_peng | 来源:发表于2018-04-19 21:21 被阅读0次

    遇到的问题:c++中一个数组传给另一个数组时不比配的问题

    正确版本1:

    #include "iostream"
    #include"string"
    
    using namespace std;
    
    
    class Student{
    private:
        char *sno,*sname;
        int age;
    public:
        Student(char sno[],char sname[],int age){
            this->sno = sno;
            this->sname = sname;
            this->age = age;
            
            
        }
        void print(){
            
            cout<<"sno:"<<sno<<" sname:"<<sname<<" age:"<<age<<endl;
        }
    
        
        
    };
    
    int main(){
        char sno[10],sname[20];
        int age;
        while(cin>>sno>>sname>>age){
            Student A(sno,sname,age);
            A.print();
            
            return 0;
        }
        
     
    }
    
    结果

    正确2:

    //....
    public:
        Student(char* sno,char * sname,int age){
            this->sno = sno;
            this->sname = sname;
            this->age = age;
            
            
        }
    //....
    

    数组名和指针皆为地址,不影响。但是有区别这两者,前者指的是数组的第一个元素的地址,并且是不可改的,常量指针,改了的话,那块地址的数组就无法使用,会内存溢出
    ;后者是可改的。

    下面这个更具体:
    https://segmentfault.com/q/1010000003793687
    错误1:

    //...
    public:
        Student(char[] sno,char[] sname,int age){
            this->sno = sno;
            this->sname = sname;
            this->age = age;
    //...
    
    
    错误

    char[] a; java风格
    char a[]; c/c++风格

    错误2:

    
    class Student{
    private:
        char sno[10],sname[20];
        int age;
    public:
        Student(const char* sno,char * sname,int age){
            this->sno = sno;
            this->sname = sname;
            this->age = age;
            
            
        }
    

    理由正如上面所说,数组名(地址)不可改(赋值)。
    只能用 strcpy ,memcpy.

    To copy the content into the array, you need to use strcpy() from string.h (char array) or memcpy() in general.

    正确:

    
    class Student{
    private:
        char sno[10],sname[20];
        int age;
    public:
        Student( char* sno,char * sname,int age){
            strcpy(this->sno,sno);
            strcpy(this->sname,sname);
            
    //        this->sno = sno;
    //        this->sname = sname;
            this->age = age;
            
            
        }
    

    总结:
    概念不清,没有细细的理解。数组和指针的熟练度太低。

    相关文章

      网友评论

          本文标题:数组赋给数组

          本文链接:https://www.haomeiwen.com/subject/ijsgkftx.html