Struct 与 Class 的初始化赋初值(struct篇)

Struct  与 Class 的初始化赋初值(struct篇)

---------------------测试环境:win10_专业版_VS2017   和 win7_专业版_VC++6.0---------------------



Struct的初始化和赋值的方法:
// Struct_Class.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>

struct A {
	A() {};
	A(int x, int y, char c) :b(x), c(y),ch(c) {};
	int b;
	int c;
	char ch;
};






int main(int argc, char* argv[])
{
	struct A a = {1, 2, 'C'};
	struct A b(4, 5, 'j');

    A a1 = { 1, 2, 'C' };
	A b1(4, 5, 'j');

	A c(1, 2, 'C');
	c.b = 3;

	A d;    
	d.b = 3;
	//A c();    //这是定义一个函数,返回类型为 A型, 而非是定义一个对象
	//c.b = 3;
	return 0;
}

//分割线-------------------------------------------------------------------------------------------------------------------------------------------------------


里面大部分都在VS2017 和VC6.0上面编译不通过
(敲黑板,至少我认为,可以修正(里面有的可以,有的不可以,亲测过了),也能够修正使其通过编译)
重点注意 原因已经找到了:没有在Class 或者 Student 里面没有写 public的(有多个参数的)构造函数~~~

//分割线-------------------------------------------------------------Struct结构体的初始化------------------------------------------------------

1.CC++结构体的初始化

今天看到项目中对自定义结构体初始化方式有点陌生,特在此罗列一下可用的结构体初始化的方式。

对结构体

struct A {
    int b;
    int c;
};
   
   

有几种初始化方式:

第一种:(不可通过编译,即使添加了有参够着函数也一样不能够通过编译)

struct A a = {
    .b = 1,
    .c = 2
};

第二种:(不可通过编译,即使添加了有参够着函数也一样不能够通过编译)

struct A a={
    b:1,
    c:2
};
   
   

第三种:可通过编译)

struct A a1 = { 1, 2};

//==================================t通过编译的初始化代码===================================
// Struct_Class.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>

struct A {
	A(int x, int y, char c) :b(x), c(y),ch(c) {};  //必须有对应的构造函数
	int b;
	int c;
	char ch;
};

struct A a ={ 1, 2, 'c' };                 //可以通过

struct A b(1, 2, 'c');                     //可以通过




int main(int argc, char* argv[])
{
	return 0;
}
//==================================t通过编译的初始化代码===================================


Linux内核喜欢用第一种,使用第一种和第二种时,成员初始化顺序可变。

第四种: (可通过编译)
因为C++中的struct可以看作class,结构体也可以拥有构造函数,所以我们可以通过结构体的构造函数来初始化结构体对象。

给定带有构造函数的结构体:

struct A {
    A(int a,int b){
        this->b=b;                 //原来的此处这里书写有问题,已经修正
        this->c=c;
    }                              //这里有没有;都可以通过编译  一个构造函数 + 空语句(等价于)
    int b;
    int c;
}
   
   

那么结构体对象的初始化可以像类对象的初始化那样,如下形式:

struct A a(1,2);
   
   

注意: struct如果定义了构造函数的话,就不能用大括号进行初始化了,即不能再使用前三种初始化的方式了。


第一种:


第二种:


第三种:


第四种:


//分割线-------------------------------------------------------------Struct结构体的赋值------------------------------------------------------

2.C/C++结构体的赋值

变量的赋值和初始化是不一样的,初始化是在变量定义的时候完成的,是属于变量定义的一部分,赋值是在变量定义完成之后想改变变量值的时候所采取的操作。

还是给定结构体A:

struct A {
    int b;
    int c;
}

注意:结构体变量的赋值是不能采用大括号的方式进行赋值的,例如下面的赋值是不允许的。(不可通过编译)

struct A  a;
//错误赋值
a={1,2};

下面列出常见结构体变量赋值的方法。

第一种: (不可通过编译)
使用memset对结构体变量进行置空操作:

//按照编译器默认的方式进行初始化(如果a是全局静态存储区的变量,默认初始化为0,如果是栈上的局部变量,默认初始化为随机值)
struct A a; 
memset(&a,0,sizeof(a));

第二种: (不可通过编译)
依次给每一个结构体成员变量进行赋值:

struct A a; 
a.b=1;
a.c=2;

第三种: (不可通过编译,即使添加了有参够着函数也一样不能够通过编译)
使用已有的结构体变量给另一个结构体变量赋值。也就是说结构体变量之间是可以相互赋值的。

struct A a={1,2};         
struct A aa;
aa=a;               //将已有的结构体变量付给aa
第三种:


本来全部都有截图,只是后面的截图大象没有截图好,就没有放上去了~~~囧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值