精华内容
下载资源
问答
  • C++结构体

    2020-02-06 14:14:54
    文章目录C++结构体一、结构体的基本概念二、结构体定义和使用2.1定义2.2使用二、结构体数组三、结构体指针四、结构体嵌套五、结构体做函数参数 C++结构体 一、结构体的基本概念 结构体属于用户自定义的数据类型,...

    C++结构体

    一、结构体的基本概念

    • 结构体属于用户自定义的数据类型,允许用户储存不同的数据类型

    二、结构体定义和使用

    2.1定义

    • 语法:struct 结构体名 { 结构体成员列表 }

    • 通过结构体创建变量的方式有三种:

      • struct 结构体名 变量名
      • struct 结构体名 变量名 = { 成员1值, 成员2值, ...}
      • 定义结构体时顺便创建变量
    • 示例

    #include <iostream>
    using namespace std;
    
    struct Student
    {
    	string name;
    	int age;
    	string gender;
    };
    
    int main() {
    	// 创建对象
    	struct Student s1;
    
    	// 赋值
    	s1.name = "tom";
    	s1.age = 20;
    	s1.gender = "man";
    
    	// name = tom age = 20 gender = man
    	cout << "name = " << s1.name << " age = " << s1.age << " gender = " << s1.gender << endl;
    
    	system("pause");
    	return 0;
    }
    

    2.2使用

    • 语法:结构体变量.结构体属性名
    • 示例:
    s1.name
    

    二、结构体数组

    • 作用:将自定义的结构体放入数组中方便维护
    • 语法:struct 结构体名 数组名[元素个数] = {{}, {}, ... {}}
    • 示例:
    	struct Student stuArray[3] =
    	{
    		{"Tom", 20, "man"},
    		{"Rose", 21, "women"},
    		{"Jack", 23, "man"}
    	};
    
    	stuArray[2].name = "bill";
    
    	for (int i = 0; i < 3; i++)
    	{
    		cout << "name = " << stuArray[i].name << " age = " << stuArray[i].age << " gender = " << stuArray[i].gender << endl;
    	}
    
    	/*
    	name = Tom age = 20 gender = man
    	name = Rose age = 21 gender = women
    	name = bill age = 23 gender = man
    	*/
    

    三、结构体指针

    • 作用:通过指针访问结构体中的成员

    • 利用操作符->可以通过结构体指针访问结构体属性

    • 示例:

    	Student s2 = { "Tom", 21, "man" };
    	Student* p = &s2;
    
    	// 通过结构体指针访问数据
    	cout << "name = " << p->name << " age = " << p->age << " gender = " << p->gender << endl;
    	// name = Tom age = 21 gender = man
    

    四、结构体嵌套

    #include <iostream>
    using namespace std;
    
    struct Student
    {
    	string name;
    	int age;
    	string gender;
    };
    
    struct Teacher
    {
    	string name;
    	int age;
    	Student stu;
    };
    
    int main() {
    
    	Teacher t1 = { "rose", 30, {"tom", 20, "man"} };
    	cout << "name = " << t1.name << " age = " << t1.age <<
    		" stu.name = " << t1.stu.name <<
    		" stu.age = " << t1.stu.age <<
    		" stu.gender = " << t1.stu.gender << endl;
    
    	/*
    	name = rose age = 30 stu.name = tom stu.age = 20 stu.gender = man
    	*/
    
    	system("pause");
    	return 0;
    }
    

    五、结构体做函数参数

    作用:将结构体作为参数向函数中传递

    传递方式有两种

    • 值传递
    • 地址传递

    用法同普通参数传递

    展开全文
  • C++ 结构体

    2021-01-05 15:02:14
    C++ 结构体 结构是用户定义的类型,结构声明 定义了这种类型的数据属性。 结构体的 声明,创建 和 初始化 分开进行 定义一个结构 描述这个结构能够存储的各种数据类型: struct struct_name { char name[23]; ...

    C++ 结构体

    结构是用户定义的类型,结构声明 定义了这种类型的数据属性。

    结构体的 声明创建初始化 分开进行

    定义一个结构

    描述这个结构能够存储的各种数据类型:

    struct struct_name {
    	char name[23];
    	float num;
    	int price;
    };
    
    关键字 struct 表明这是一个 结构体 声明,定义了这样的一个结构体。
    struct_name 自己定义的这种数据类型的名称,等同于 int , float
    char name ... int price 结构体成员

    注:} 后要加 ;


    创建结构体类型变量

    声明一个 struct_name 类型的变量 hat

    struct_name hat;
    

    注:c++ 在声明结构变量时,允许省略关键字 struct,而 c 语言要:struct struct_name hat;。说明,在 c++ 中,结构声明定义了一种新的类型,这种新类型与基本类型名(如:int)用法相同。


    成员运算符 .

    使用 成员运算符 . 访问结构体的各个成员,如:

    hat.name[1];
    hat.num;
    

    hat 是一个 结构,而 hat.num 是一个 float 型变量。

    访问类成员的方式由此演化而来,如:cin.getline()


    初始化

    C++11 同数组一样,支持使用列表初始化结构体:

    struct_name hat {"hat name", 0.13, 11};
    struct_name nat = {"nat name",
    					0.45,
    					34
    				  };
    
    1. = 可选,不用必须选择。
    2. 初始化列表可以将数据放在同一行,也可以放在不同行,但均需使用 , 进行分隔。
    3. } 与数据之间不许再放 ,} 之后要有 ;
    struct_name cat {};
    
    1. 如果 {} 中没有任何东西,则每个成员均会被置 0
      cat.name 的每个字节都会被置 0cat.numcat.price 均被置 0

    结构体的部分属性
    1. 结构体可以作为参数传递给函数,也可以作为函数的返回值。
    2. 可以使用 赋值运算符 = 将结构赋给另一个 同类型 的结构,即使成员中有数组也可以,这种赋值被称为 成员赋值

    结构体的 声明创建初始化 同时进行

    声明创建 同时进行
    struct pse {
    	int num;
    	float sen;
    }pse_na, pse_nb;
    

    将创建的结构体变量名称放到 } 后,如有多个,则用 , 分隔开,最后一个后加上 ; 即可。

    声明创建初始化 同时进行
    struct pse {
    	int num;
    	float sen;
    }pen_na = {1, 2,34};
    

    没有名称的结构体类型

    没有名称的结构体类型只能再声明的同时创建变量,之后就无法再创建新的这种类型的变量了。

    struct {
    	int num;
    	float sen;
    }pen_na;
    

    c++ 结构除了成员变量以外,还可以有成员函数,但他们经常被用在类中,而不是结构体当中。


    结构数组

    展开全文
  • c++ 结构体

    2019-03-13 19:08:00
    c++ 结构体 #include <iostream> #include <cstring> using namespace std; // 声明一个结构体类型 Books struct Books { char title[50]; char author[50]; char subject[10...

    c++ 结构体

    
    #include <iostream>
    #include <cstring>
     
    using namespace std;
     
    // 声明一个结构体类型 Books 
    struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    };
     
    int main( )
    {
       Books Book1;        // 定义结构体类型 Books 的变量 Book1
       Books Book2;        // 定义结构体类型 Books 的变量 Book2
     
       // Book1 详述
       strcpy( Book1.title, "C++ 教程");
       strcpy( Book1.author, "Runoob"); 
       strcpy( Book1.subject, "编程语言");
       Book1.book_id = 12345;
     
       // Book2 详述
       strcpy( Book2.title, "CSS 教程");
       strcpy( Book2.author, "Runoob");
    
    
       strcpy( Book2.subject, "前端技术");
       Book2.book_id = 12346;
     
       // 输出 Book1 信息
       cout << "第一本书标题 : " << Book1.title <<endl;
       cout << "第一本书作者 : " << Book1.author <<endl;
       cout << "第一本书类目 : " << Book1.subject <<endl;
       cout << "第一本书 ID : " << Book1.book_id <<endl;
     
       // 输出 Book2 信息
       cout << "第二本书标题 : " << Book2.title <<endl;
       cout << "第二本书作者 : " << Book2.author <<endl;
       cout << "第二本书类目 : " << Book2.subject <<endl;
       cout << "第二本书 ID : " << Book2.book_id <<endl;
     
       return 0;
    }
    第一本书标题 : C++ 教程
    第一本书作者 : Runoob
    第一本书类目 : 编程语言
    第一本书 ID : 12345
    第二本书标题 : CSS 教程
    第二本书作者 : Runoob
    第二本书类目 : 前端技术
    第二本书 ID : 12346

    posted on 2019-03-13 19:08 luoganttcc 阅读(...) 评论(...) 编辑 收藏

    展开全文
  • 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
    

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


    参考文献

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

    展开全文
  • 为了方便大家理解,导图简单整理了一下。后续我会不断推出C++学习过程中的总结,如果喜欢的话,可以私聊我。 C++结构体与C++类的区别: 主要的区别有两个:
  • c++结构体

    2018-09-16 20:32:52
    //此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c,但没有标明其标签,声明了结构体变量s1 struct  {  int a;  char b;  double c; } s1; //此声明声明了拥有3个成员的结构体,分别为...
  • C++结构体作为函数参数传参

    万次阅读 2020-06-25 10:45:56
    //结构体 struct Student { string name; int age; int score; }st3; /* *结构体作为函数参数传参 */ //值传递 void printStufdent1(struct Student st3) { cout << "子函数" << endl; st3....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,747
精华内容 7,498
关键字:

c++结构体

c++ 订阅