精华内容
下载资源
问答
  • C++ 结构体初始化与赋值

    万次阅读 多人点赞 2016-05-30 13:28:57
    1.CC++结构体的初始化今天看到项目中对自定义结构体初始化方式有点陌生,特在此罗列一下可用的结构体初始化的方式。对结构体struct A { int b; int c; }有几种初始化方式:第一种:struct A a = { .b = 1, ...

    在这里插入图片描述

    1.结构体初始化

    结构体是常用的自定义构造类型,是一种很常见的数据打包方法。结构体对象的初始化有多种方式,分为顺序初始化、指定初始化、构造函数初始化。假如有如下结构体。

    struct A {
    	int b;
    	int c;
    };
    

    (1)顺序初始化因为书写起来较为简约,是我们最常用的初始化方式,但相对于指定初始化,无法变更数据成员初始化顺序,灵活性较差,而且表现形式不直观,不能一眼看出 struct 各个数据成员的值。

    A a = {1, 2};
    

    (2)指定初始化(Designated Initializer)实现上有两种方式,一种是通过点号加赋值符号实现,即“.fieldname=value”,另外一种是通过冒号实现,即“fieldname:value”,其中 fieldname 为结构体成员名称 。前者是 C99 标准引入的初始化方式,后者是 GCC 的扩展。遗憾的是有些编译器并不支持指定初始化,比如 Visual C++。

    // 点号+赋值符号
    A a = {.b = 1, .c = 2};
    
    //冒号
    A a = {b:1, c:2};
    

    Linux 内核喜欢用 .fieldname=value 的方式进行初始化,使用指定初始化,一个明显的优点是成员初始化顺序和个数可变,并且扩展性好,比如在结构体非末尾处增加字段时,避免了传统顺序初始化带来的大量修改。

    (3)构造函数初始化常见于 C++ 代码中,因为 C++ 中的 struct 可以看作 class,结构体也可以拥有构造函数,所以我们可以通过结构体的构造函数来初始化结构体对象。给定带有构造函数的结构体:

    struct A {
    	A(int b,int c) {
    		this->b=b;
    		this->c=c;
    	};
    	int b;
    	int c;
    }
    

    那么结构体对象的初始化可以像类对象初始化那样:

    A a(1,2);
    

    注意: struct 如果定义了构造函数的话,就不能用大括号进行初始化了,即不能再使用指定初始化与顺序初始化了。

    2.结构体赋值

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

    struct A {
    	int b;
    	int c;
    };
    

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

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

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

    (1)使用 memset 对结构体变量进行置空操作:

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

    (2)依次给每一个结构体成员变量进行赋值:

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

    (3)使用已有的结构体变量给另一个结构体变量赋值。也就是说结构体变量之间是可以相互赋值的。

    A a = {1,2};
    struct A a1;
    a1=a; 				// 将已有的结构体变量赋给a1
    

    初始化与赋值有着本质的区别,初始化是变量定义时的第一次赋值,赋值则是定义之后的值的变更操作,概念上不同,所以实现上也不一样。


    参考文献

    2016腾讯春季校园实习招聘技术岗初试(一面)问题汇总(CC++后台)
    结构体初始化
    C结构体-designated initializer
    C语言结构体声明中冒号的使用(占位符) & C结构体的乱序初始化

    展开全文
  • c++ 结构体 初始化

    2021-08-07 18:13:40
    c++ 结构体 初始化 #include <iostream> #include <algorithm> #include<cstring> using namespace std; struct student{ int grade; char name[101]{}; int age; //student (int Grade,...

    c++ 结构体 初始化

    #include <iostream>
    #include <algorithm>
    #include<cstring>
    using namespace std;
    
    
    struct student{
        int grade;
        char name[101]{};
        int age;
        //student (int Grade,char Name [],int Age): grade(Grade), age(Age){strcpy(name,Name)};
        student(){};//无参的构造函数
        student(int Grade , const char Name[], int Age){//有参的构造函数
            this->grade=Grade;
            strcpy(this->name, Name);
            this->age=Age;
        }
    };
    
    
    
    
    int main(){
        //无构造函数时初始化
        student stu1={100,"lucy",16};
        cout<<stu1.grade<<" "<<stu1.name<<" "<<stu1.age<<" "<<endl;
    
        //有构造函数初始化:
        student stu2(98,"frank",15);
        cout<<stu2.grade<<" "<<stu2.name<<" "<<stu2.age<<" "<<endl;
    
        //结构体数组赋初值
        int n=2;
        student people[n];
        for (int i = 0; i <n ; ++i) {
            scanf("%d%s%d",&people[i].grade,people[i].name,&people[i].age);//scanf不要留空格
        }
        for (int i = 0; i < n;i++){
            cout<<people[i].grade<<" "<<people[i].name<<" "<<people[i].age<<" "<<endl;
        }
        return 0;
    }
    
    展开全文
  • c++结构体初始化

    2021-02-09 17:27:22
    转载: 结构体初始化小技巧
    展开全文
  • C++ 结构体初始化

    2018-07-18 21:08:00
    #include &lt;stdio.h&gt; int main(int argc, const char * argv[]) { //定义结构体类型 struct Person { char *name; int age; double heigth; }; ... //初始化的4种方...
     
    #include <stdio.h>
     
    int main(int argc, const char * argv[]) {
        
        //定义结构体类型
        struct Person
        {
            char *name;
            int age;
            double heigth;
        };
        
        //初始化的4种方式
        
        //1.定义的同时初始化
        struct Person p1 = {"zhangsan",20,170};
        
        //2.先定义再逐个初始化
        struct Person p2;
        p2.name = "ykd";
        p2.age = 18;
        p2.heigth = 180;
        
        //3.先定义再一次性初始化
        struct Person p3;
        p3 = (struct Person){"lisi",18,180};
        
        //注意:结构体和数组在这里的区别,数组不能先定义再进行一次性初始化
        //结构体要明确的告诉系统{}中是一个结构体
        
        //4.指定将数据赋值给指定的属性
        struct Person p4 = {.heigth=1.77, .name="wangwu", .age=33};
        
        
        //如何从结构体中取数据?
        printf("name=%s,age=%i,heigth=%f\n",p4.name,p4.age,p4.heigth); //name=wangwu,age=33,heigth=1.770000
        
        
        return 0;
    }

     

    展开全文
  • C++结构体初始化

    千次阅读 2013-12-03 10:58:44
    }结构体是封装在一个LIB库里,当外部程序使用LIB库时 ,LIB库用到了这个结构体,在使用的地方,通过调用可以看到std::string strbuf这个变量为错误的指针,在程序里对strbuf进行任何操作都会出现错误,正确使用如下...
  • 今天对于C++ 结构体初始化又有了新的认识。  以下代码在VS2013上测试通过。  VS2013 支持C++11.  typedef struct SScrollViewItem { NcString* iconPath = NULL;//条目前边的icon图标 uint32 ...
  • c++ 结构体初始化

    2012-04-13 21:53:14
    这是结构体: const struct configcommandinfo { const char *name; void (*fn)(adns_state ads, const char *fn, int lno, const char *buf); } configcommandinfos[]= { { "nameserver", ccf_nameserver }...
  • C++ 结构体初始化方法

    千次阅读 2015-11-12 23:15:33
    C++结构体初始化有以下几种方法: 使用构造函数 在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。 定义时,按照成员变量位置,写初始...
  • C++结构体初始化问题

    2018-06-09 11:29:48
    相对于C语言,C++中的结构体初始化有更多的选择,除了malloc之后再赋值之外,也可以用new来初始化,但是在vs中,如果new的方法不对的话会出现错误: IntelliSense: 类 “ListNode” 不存在默认构造函数 f:\OneDrive...
  • 结构体初始化赋值方式:有很多种,现在介绍一种乱序初始化方式; 对于C语言: struct test { int a; int b; } 赋值操作: struct test a = { .a = 1, .b = 2 } C++语言: struct test { int a; int b; } ...
  • C/C++结构体初始化

    2017-09-19 20:01:55
    针对C/C++中定义的结构体,如何初始化其实是一门很深的学问,很多项目的bug是由结构体初始化造成的。struct A { int a; int b[2]; char *c; string d; }A1不如上面的结构体,如何针对这四个不同类型的变量进行...
  • 但是在c++中,使用memset来初始化一个结构体,却经常得不到正常的结果。这是为什么呢? 问题其实是出在了,结构体成员变量类型上了,因为使用了非ADT类型(大致就是c++一些特有的类型,如string,vector等等)。...
  • 1.结构体初始化 结构体是常用的自定义构造...结构体对象的初始化有多种方式,分为指定初始化、顺序初始化、构造函数初始化。假如有如下结构体。 struct A { int b; int c; } (1)指定初始化(Designated Initi...
  • vector操作以及结构体初始化结构体初始化初始化方式1:不带构造函数初始化方式2:使用构造函数vector的一些操作vector是啥?vector的一些操作提前准备声明一个vector添加一个元素删除一个元素获取vector元素vector...
  • 最近研究用c++开发Python的库,按照教程,需要给一个结构体赋值,代码如下: ```cpp static PyTypeObject Student_Class = { PyVarObject_HEAD_INIT(NULL, 0) .tp_name = "python_class.Student", .tp_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,564
精华内容 26,225
关键字:

c++结构体初始化

c++ 订阅