C++ 结构体初始化

c++结构体

1. 构造函数和运算符

这样没有默认值

 

struct node{
 int id;
node*left;
 node(int a):id(a),left(nullptr){}

};

 

 这样要注意如下的问题

node * root=new node(0);
node * y;
node* x=root,z;

//这样会报错 no-matching-function-for-call-to-nodenode; 原因应该是 node* x=root,z;的z被当做了构造函数参数的一部分?

改成
node * x=root;
node* z;就没问题了

 

 

这样有默认值(new的时候可以先不赋值)

 

struct Point{

int x,y;

Point (int x=0,int y=0):x(x),y(y){}

};

Point operator + (const Point&A,const Point&B) {   //构造函数

retuen Point(A.X+B.x,A.y+B.y);

}

ostream& operator <<(  //不搞了

 

 

Point a,b(1,2);

a.x=3;

 

 

 template的结构体

struct Point{

T x,y;

Point (T x=0,T y=0):x(x),y(y){}

};

Point<T> operator + (const Point<T>&A,const Point<T>&B) {   //构造函数

retuen Point<T>(A.X+B.x,A.y+B.y);

}

Point<int>a;

 

 

 重载运算符:

 

struct ant

{

    int id;

    int p;

    int d;

    bool operator <(const ant &a) const {return p<a.p;}

};

 

 普通的初始化

struct Person p1 = {"zhangsan",20,170};

 

 

另一种构造

 

struct Stu

 {

  int  nNum;

  bool bSex;

  char szName[20];

  char szEmail[100];

 

  //构造函数初始化

  Stu()

  {

   nNum = 0;

   bSex = false;

   memset(szName,0,sizeof(szName));

   memset(szEmail,0,sizeof(szEmail));

 

  }

 };

 

 

2.自动赋值

1.结构体指针,malloc分配空间,不会自动赋值  但是new会。  这里包括指针自动赋值NULL

 

 (测试发现如果不构造函数初始化为零,那么newmalloc都是随机的;但是初始化后new不随机,malloc仍随机)//也就是上面说的有没有默认值

所以要注意初始化

这里的初始化可以是

 

struct ss{
int
a=0; int b=1; struct ss * next,*be=NULL;
};

或者

 

ss(int a=0,struct ss * next=NULL):a(a),next(next){} 

 

 

3. 注意何时需要分配内存。

写入数据才需要。而只是指向地址则不需要。故假设p1 写入了数据,p1new,而p2=p1即可,无需new

 

 注意free

 

4.

 

int height(node* root)

{

    if(root==NULL)

        return 0;

    int lh=height(root->next);

    int rh=height(root->be);

    return (lh>rh)?lh+1:rh+1;

}

 

struct ListNode {

int val;

ListNode* next;

ListNode(int x) : val(x), next(NULL) {}

};

///ListNode* h = new ListNode(0);

///或 ListNode h(0);

struct node{

int a;

struct node *next,* be;

node(int a=0,struct node * next=NULL,struct node * be=NULL):a(a),next(next),be(be){}

};
Node a (
1null,null); node * root=new node; node * root1=(node*)malloc(sizeof(node)); int h=height(root); //h=1,因为是new出来的,root不认为是NULL int h2=height(root1); //出错,因为root是随机的 root1=NULL; int h2=height(root1); h2=0;

 

 

由上,再创立节点以及给其nextNULL,赋值时要小心注意。   

注意顺序。

root new了。然后root=NULL。就不要;root->next=new了。

 

5.

还有一个错误。比如 node *p=root

p=NULL;这样p就和root又无关了。不要用proot

posted @ 2019-12-29 18:54  Erio  阅读(7906)  评论(0编辑  收藏  举报