精华内容
下载资源
问答
  • 结构体初始化1、结构体的构造函数中初始化在C++中,结构体与类在使用上已没有本质上的区别了,所以可以使用构造函数来初始化。如下代码所示:struct Stu{int nNum;bool bSex;char szName[20];char szEmail[100];...

    结构体初始化

    fd0ffb73d104545baaf9686bb8987e08.png

    1、结构体的构造函数中初始化

    在C++中,结构体与类在使用上已没有本质上的区别了,所以可以使用构造函数来初始化。如下代码所示:

    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));

    }

    };

    你可能已经发现了,如果结构体中有大量成员,一个个赋值,相当麻烦。那么你可以这样写:

    struct Stu

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    //构造函数初始化

    Stu()

    {

    memset(this,0,sizeof(Stu));

    //或者是下面的格式

    //memset(&nNum,0,sizeof(Stu));

    }

    };

    如果在结构体中分配了指针,并且指针指向一个堆内存,那么就在析构函数中释放。以上便是在构造函数中初始化。

    2、继承模板类初始化。

    首先定义一个模板基类:

    template 《typename T》

    class ZeroStruct

    {

    public:

    ZeroStruct()

    {

    memset(this,0,sizeof(T));

    }

    };

    之后定义的结构体都继承于此模板类。

    struct Stu:ZeroStruct《Stu》

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    };

    这样也能实现初始化。

    3、定义时初始化。

    struct Stu

    {

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    };

    //定义时初始化

    Stu stu1 = {0};

    在有的结构体中,第一个成员表示结构体的大小,那么就可以这样初始化:

    struct Stu

    {

    int nSize; //结构体大小

    int nNum;

    bool bSex;

    char szName[20];

    char szEmail[100];

    };

    Stu stu1 = {sizeof(Stu),0};

    后面的0,可以省略掉,直接写成:Stu stu1 = {sizeof(Stu)};后面自动会用0填充。

    关于结构体的类型要注意的几点:

    (1)类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。

    (2)对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于同类型的普通变量。

    (3)结构体的成员也可以是一个结构体变量。

    结构变量的赋值

    你可对结构体变量的成员逐个赋值,这种方式和数组相像,数组就是逐个元素逐一赋值(对于数组,除非初始化,否则你别无选择,只能这样赋值)。不同于数组,标准C中结构体变量可以整体赋值。

    例一:

    #include 《stdio.h》

    int main(void)

    {

    struct student

    {

    long int num;

    int age;

    char* name;

    }st1={200,18,“zhangsan”};

    struct student st2,st3;

    printf(“ NO. age name /n”);

    printf(“ %ld %d %s/n”,st1.num,st1.age,st1.name);

    getch();

    st2.num=199;

    st2.age=19;

    st2.name=“lisi”;

    printf(“ %ld %d %s/n”,st2.num,st2.age,st2.name);

    getch();

    st3=st2;

    printf(“ %ld %d %s/n”,st3.num,st3.age,st3.name);

    getch();

    printf(“/n/n struct student:%d”,sizeof(struct student));

    getch();

    return 0;

    }

    例二:

    #include 《stdio.h》

    #include 《conio.h》

    struct birth

    {

    int year;

    int month;

    int day;

    };

    struct student

    {

    long int num;

    struct birth birthday;

    char* name;

    }st1={200,{1988,8,8},“zhangsan”};

    int main(void)

    {

    struct student st2;

    st2=st1;

    printf(“ %ld %s %d/n”,st2.num,st2.name,sizeof(int));

    printf(“ year: %d month: %d month: %d/n”,

    st2.birthday.year,

    st2.birthday.month,

    st2.birthday.day);

    getch();

    return 0;

    }

    注意

    当你的结构体变量中有存放多个字符的成员,建议你将它定义为数组(比如前面的姓名成员,不知道数组该开辟多大时,也可以定义为指针)。原因是指针变量不能存放实际数据,仅仅是地址。

    展开全文
  • JS 数组初始化赋值

    2021-06-23 09:52:39
    简单初始化赋值// 1、指定长度、然后初始化 let arr = new Array(5) for (let i = 0; i < arr.length; i++){ arr[i] = i } // 2、不指定长度赋值 let arr = new Array() // 或者 let arr = [] arr.push(1) // ...
    • 简单初始化赋值
      // 1、指定长度、然后初始化
      let arr = new Array(5)
      for (let i = 0; i < arr.length; i++){
      	arr[i] = i
      }
      
      // 2、不指定长度赋值
      let arr = new Array()
      // 或者 let arr = []
      arr.push(1)
      
      // 3、直接赋值
      let arr = [1, 2, 3]
      
    • Array.fill、Array.from、Array.map
      // 初始化相同值
      let arr = Array(3).fill(1)  // [1,1,1]
      let arr = Array.from({length: 3}, () => 1)  // [1,1,1]
      
      // 二维
      let arr1 = Array(3).fill([])  // [[],[],[]]
      let arr2 = Array.from({length: 3}, () => ([]))  // [[],[],[]]
      // 区别
      arr1[0] === arr1[1]  // true
      arr2[0] === arr2[1]  // false
      
      //初始化规律值
      let arr = Array.from({length: 3}, (_, index) => index + 1)  // [1,2,3]
      
      // Array.from和...一样可以浅克隆一个数组
      let arr1 = [1,2,3]
      let arr2 = Array.from(arr1)
      let arr3 = [...arr1]
      
      // 深克隆
      function recursiveClone(val) {
        return Array.isArray(val) ? Array.from(val, recursiveClone) : val;
      }
      
      // Array.map
      let arr1 = [...Array(3)].map((a, index) => ...)
      let arr2 = Array.from(Array(10)).map((a, index) => ...)
      

    参考: https://zhuanlan.zhihu.com/p/215497461

    展开全文
  • Java 数组、List初始化赋值

    千次阅读 2021-04-15 19:38:12
    1 数组初始化赋值 //第一种初始化赋值方式 String[] strs1={"1","2"}; //第二种初始化赋值方式 String[] strs2=new String[]{"1","2"}; 2 List初始化赋值 //第一种初始化赋值方式(推荐) List<String> ...

    1 数组初始化赋值

    //第一种初始化赋值方式
    String[] strs1={"1","2"};
    
    //第二种初始化赋值方式
    String[] strs2=new String[]{"1","2"};

    2 List初始化赋值

    //第一种初始化赋值方式
    List<String> strList1=Arrays.asList(new String[]{"1","2"});
    
    //第二种初始化赋值方式(推荐)
    List<String> strList2=new ArrayList(Arrays.asList(new String[]{"1","2"}));
    
    //第三种初始化赋值方式
    List<String> strList3=new ArrayList<String>{{
        add("1");
        add("2");
    }};

    注:Arrays.asList()返回的对象不支持add()和remove()方法。具体原因请参考以下博客。

    Java Arrays.asList()需要注意的坑(不支持add()和remove())icon-default.png?t=L892https://mp.csdn.net/console/editor/html/115797849

    展开全文
  • 1、HashMap 初始化的文艺写法看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了...然后问题来了,这里的双括号”{{}}”到底什么意思,什么用法呢?双括号”{{}}”,用来初始化,使代码简洁易读。第...

    1、HashMap 初始化的文艺写法

    看完这段代码,很多人都会觉得这么写太啰嗦了,文艺青年一般这么来了:

    HashMap map = new HashMap() {

    {

    put("name", "test");

    put("age", "20");

    }

    };

    看起来优雅了不少,一步到位,一气呵成的赶脚。然后问题来了,这里的双括号”{{}}”到底什么意思,什么用法呢?

    双括号”{{}}”,用来初始化,使代码简洁易读。

    第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。

    2、推而广之,可初始化ArrayList、Set

    List names = new ArrayList() {

    {

    for (int i = 0; i < 10; i++) {

    add("A" + i);

    }

    }

    };

    System.out.println(names.toString());

    3、Java7:增加对collections的支持

    在 Java 7 中你可以像 Ruby, Perl、Python 一样创建collections了, 但是这些集合是不可变的。

    List list = ["item"];

    String item = list[0];

    Set set = {"item"};

    Map map = {"key" : 1};

    int value = map["key"];

    4、文艺写法的潜在问题

    文章开头提到的文艺写法的好处很明显就是一目了然。这里来罗列下此种方法的坏处,如果这个对象要串行化,可能会导致串行化失败。

    1.此种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。所以当时串行化这个集合时外部类也会被不知不觉的串行化,当外部类没有实现serialize接口时,就会报错。

    2.上例中,其实是声明了一个继承自HashMap的子类。然而有些串行化方法,例如要通过Gson串行化为json,或者要串行化为xml时,类库中提供的方式,是无法串行化Hashset或者HashMap的子类的,从而导致串行化失败。解决办法:重新初始化为一个HashMap对象:

    new HashMap(map);

    这样就可以正常初始化了。

    5、执行效率问题

    当一种新的工具或者写法出现时,猿们都会来一句:性能怎么样?(这和男生谈论妹纸第一句一般都是:“长得咋样?三围多少?”一个道理:))

    关于这个两种写法我这边笔记本上测试文艺写法、普通写法分别创建 10,000,000 个 Map 的结果是 1217、1064,相差 13%。

    public class Test {

    public static void main(String[] args) {

    long st = System.currentTimeMillis();

    /*

    for (int i = 0; i < 10000000; i++) {

    HashMap map = new HashMap() {

    {

    put("name", "test");

    put("age", "20");

    }

    };

    }

    System.out.println(System.currentTimeMillis() - st); // 1217

    */

    for (int i = 0; i < 10000000; i++) {

    HashMap map = new HashMap();

    map.put("name", "test");

    map.put("age", "20");

    }

    System.out.println(System.currentTimeMillis() - st); // 1064

    }

    }

    ---------------------

    本文来自 无名_四叶草 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zdyueguanyun/article/details/79216998?utm_source=copy

    展开全文
  • 常用的初始化方式 int arry1[5] = {1,2,3,4,5}; int arry1[5] = {0}; int arry3[] = {1,2,3,4,5}; 乱序初始化 #include <stdio.h> int main(void) { int i=0; int a[]= { [0]=0, [3]=33, [2]=22, ...
  • List初始化赋值的几种方式

    千次阅读 2021-02-05 10:24:06
    所以百度了一下,了解了list的其他几种初始化方式,现记录一下。 1.构造 List 后使用 List.add 初始化 List<String> stringList = new LinkedList<>(); stringList.add("a"); stringList.add("b"); ...
  • java HashMap 初始化赋值

    2021-04-15 10:35:05
    java HashMap 初始化赋值 方式一 HashMap<String, String> map = new HashMap<>(); map.put("name","zhangSan"); Map.put("age","18"); 方式二 HashMap<String, String> map = new HashMap<...
  • Java 中 HashMap 初始化赋值

    千次阅读 2021-03-04 03:34:29
    1、HashMap 初始化的文艺写法HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:HashMap map = new HashMap();map.put("name", "test");map.put("age", "20");看完...
  • Java的赋值初始化

    2021-03-16 19:21:06
    zhangleispirit@gmail.comJava的赋值初始化包括很多容易被忽视的地方,在此分类总结如下:1.和赋值相关:基本类型的赋值运算需要注意的是赋值时的类型转换问题,什么时候可以自动转换,什么时候需要强制类型转换是...
  • 初始化赋值的区别

    2021-04-17 20:32:25
    初始化时在系统程序运行前进行的,赋值则是相反,在系统程序运行后进行。 例如: 初始化:int a=1,是系统初始化,先申请一个变量为a,再将这个单元放置1 赋值:int a,b=1;a=b;这里是在程序运行后进行的赋值操作 .....
  • 成员变量初始化方式有两种:列表初始化赋值初始化。如下代码。但是这两种初始化表面上看着相同,但是用法和原理却并不相同。本篇博客主要讨论这两种初始化的使用方法和基本原理。 class Test { public: Test(int ...
  • java中类的属性初始化赋值问题 类中属性没初始化情况 如果类中属性没被初始化,系统将会有个初始值 class A { public int i; public boolean g; public void add () { System.out.printf ("%d\n", i); ...
  • 最近开发过程中遇到 antd form 表单赋值不上 查阅文档得知;需要setFieldsValue 和 createRef() 结合起来使用 1.创建createRef() export default class HomeIdenx extends Component { constructor(props) { super...
  • C++中对变量的操作有很多,比如赋值初始化等。很多人都会把赋值初始化混为一谈,下面我们就来研究一下赋值初始化的区别。先上结论: 初始化 赋值 在变量生命周期中只能进行一次 可以无限次数进行 ...
  • java map初始化赋值

    千次阅读 2021-02-02 11:56:29
    第一种方式:static 块 public class MapTest { private static final Map<String, String> myMap = new HashMap<String, String>();...第二种方式:双括号初始化 (匿名内部类) .
  • C语言指针的初始化赋值

    千次阅读 多人点赞 2021-01-14 20:14:11
    1、指针的初始化 指针初始化时,“=”的右操作数必须为内存中数据的地址,不能够是变量,也不能够直接用整型地址值(可是int*p=0;除外,该语句表示指针为空)。此时,*p仅仅是表示定义的是个指针变量,并没有间接取值...
  • //一维数组String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组String[] str = ...String数组初始化区别首先应该明白java数组里面存的是对象的引用,所以必须初始化才能用;String[] str ...
  • 1、HashMap 初始化的文艺写法HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器。普通青年一般会这么初始化:HashMap map = new HashMap();map.put("name", "test");map.put("age", "20");看完...
  • 点击编辑按钮时候需要根据id 来判断当前选择的是什么内容 以检测项目为例 <form class="layui-form" action=""> <div class="layui-input-block input_block"> <select name="city" lay-verify=...
  • 链表初始化赋值以及插入 下面展示一些 代码。 #include<iostream> #include<stdlib.h> //创建一个结构体来表示链表的结点类型 struct ListNode{ int val; struct ListNode *next; ListNode(int x):...
  • 串的初始排放移动源的控制。...相同构与其网络结,语言允最快种L技的一是X术中。许用最重要的核算是(。字符组作值不正下列杠杆件里的企确的业条适合收购是(。喜活静于波浪平,紫菜,盐度稍低,中多的量较含磷水域,...
  • // 清空字符串name中的内容 注意了,字符串变量的初始化与其它类型不同,要用memset函数 六、变量的赋值 把常量的值赋给变量: ii=10; // 整数型变量赋值10 cc='A'; // 字符型变量赋值'A' money=1500.87; // 浮点型...
  • 类成员初始化赋值

    2021-12-13 15:35:39
    定义一个变量,就是在内存中为你定义的这个变量开辟一段内存空间,如果这个变量没有初始化,那么系统会随机给这个变量赋一个值,这个值我一般称它为"垃圾数"。 没有初始化的变量我认为它是没有意义的,是在浪费内存...
  • 这里写自定义目录标题C++中初始化赋值的区别 C++中初始化赋值的区别 区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。 int a=12 ; //...
  • C语言结构体初始化的四种方法 ericbars 2018-03-15 17:17:19 160301 收藏 183 分类专栏: 技术基础 文章标签: 结构体初始化 C语言 版权 定义 struct InitMember { int first; double second; char* third; ...
  • 代码编译运行环境:VS2012+Win32+Debug1.字符数组的初始化方式变量的定义指的是:指明变量所属类型、变量名称、分配...变量的赋值和变量的初始化有着本质的区别,具体见我的另一篇博客:初始化那点小事。1.1逐个字...
  • 在C++中,初始化赋值是不同的操作! 首先来看概念: 初始化:创建变量时,赋予其一个初始值。 赋值:把对象当前值擦除,以一个新值代替。 而初始化中有两种形式:直接初始化和拷贝初始化。 如果我们使用“=”即...
  • 1、指针的初始化 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的...
  • Mat 的几种初始化赋值方法

    千次阅读 2020-12-23 01:15:59
    由Point3f 到 Mat有两种方法,一种使用cv::Mat_(),另一种是在声明时使用{}初始化。注意:第一种方法得到的Mat的数据类型的通道数不为1,需要使用reshape()函数,第二种方式得到的通道数为1。由vector 到 Mat比较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 834,501
精华内容 333,800
关键字:

初始化赋值是什么意思