C/C++ struct结构体写法

首先,声明结构体时可以使用一种良好技巧,用typedef创建一种新的类型

  1. 使用typedef的情况
  typedef struct   //注意没有结构体标签
      {
      }XX;

用法:XX a;
这是个匿名结构体,XX是匿名结构体的别名

  1. 另一种使用typedef的情况 (能用这个就不要用别的)
  typedef struct tagXX
      {
      }XX;

用法:XX a;(或者 tagXX a; 也可以)
这是最常用的写法,清晰不言自明,tagXX是结构体标签,XX是 struct tagXX的别名



struct声明定义总结

(1)传统C语言中,定义结构体的标准语法是: //先声明结构体类型再定义变量名

struct tagXX
         {
         }

声明struct新对象时,必须带上struct,即struct tagXX a;写成tagXX a的形式是错误的,但是在C++中却是可以的。


(2)在声明类型的同时定义变量

 struct tagXX
          {
          }a,b;

(3)直接定义结构体类型变量
    struct //注意没有结构体类型名
    {
    }a;

这种写法是最没人用的,因为它的定义是一次性的

### 回答1: C 语言中可以使用结构体来组织和管理一组相关的数据,而结构体初始化则是在创建结构体变量时,为结构体中的各个成员赋初值的过程。在 C 语言中,有多种方式可以实现结构体初始化,以下是其中一些常见的写法。 1. 直接初始化 可以在结构体变量定义时,使用花括号括起来的初始值列表来对结构体成员进行初始化,例如: struct person { char name[20]; int age; double height, weight; } p = {"Tom", 18, 1.75, 65}; 这样定义的结构体变量 p 就被初始化为一个 name 为 "Tom",age 为 18,height 为 1.75,weight 为 65 的 person 结构体。 2. 先定义后赋值 也可以先定义结构体变量,再对其各个成员进行逐个赋值的方式来进行结构体初始化,例如: struct person p; p.age = 18; p.weight = 65; strcpy(p.name, "Tom"); p.height = 1.75; 此时定义的结构体变量 p 就被初始化为一个与上例相同的 person 结构体。 3. 其他方式 除了上述两种方式,C 语言中还可以通过指针、数组等方式来进行结构体的初始化,具体实现方式可以根据实际需求进行选择。 总之,结构体初始化是 C 语言中常用的一个功能,多种实现方式提供了更大的灵活性和便捷性,可以根据需求进行选择。 ### 回答2: 在C语言中,结构体是一种自定义数据类型,它可以包含不同种类的数据类型。当我们使用结构体的时候,需要先定义一个结构体类型,然后再使用该类型定义结构体变量,即声明并定义结构体变量。在定义结构体变量时,需要对其进行初始化,以为其成员变量赋初始值。 结构体初始化的写法主要有以下两种: 1. 逐个指定成员变量的初始化值 这种方法是最基本的初始化方式,在结构体定义时,按照成员变量的顺序,逐个指定其初始化值,使用大括号将各成员初始化值括起来。例如: struct student { int id; char name[20]; int age; }; struct student stu = { 1, "Tom", 18 }; 2. 指定某些成员变量的初始化值 有时,我们只需要对结构体中的某些成员变量赋值,而对其他成员变量则不赋值,此时我们可以使用这种方式。在初始化时,使用大括号将指定成员初始化值括起来,并用逗号将其与其他成员变量的初始化值隔开。例如: struct student { int id; char name[20]; int age; }; struct student stu = { 1, "Tom" }; // 只指定 id 和 name 成员变量的初始化值 总的来说,结构体初始化的方式比较灵活,可以根据实际需求选择逐一初始化或部分初始化的方法。无论哪种方式,只要能够为结构体成员变量赋初值即可。 ### 回答3: C语言中的结构体是一种自定义数据类型,它允许我们在一个变量中存储多个不同类型的数据,并且可以方便地进行操作。在使用结构体时,我们需要先定义结构体类型,然后声明结构体变量,在声明变量时可以使用结构体初始化语法,即在声明时直接对结构体成员进行初始化赋值,在需要的时候可以省略结构体变量的初始化。 在C语言中,结构体初始化有两种方法:按成员顺序初始化和按成员名称初始化。 按成员顺序初始化的语法格式如下: ``` 结构体类型 变量名 = {成员1的值, 成员2的值, ..., 成员n的值}; ``` 按成员名称初始化的语法格式如下: ``` 结构体类型 变量名 = { .成员1名称 = 成员1的值, .成员2名称 = 成员2的值, ..., .成员n名称 = 成员n的值}; ``` 其中,按成员名称初始化需要使用“.”操作符来指定每个成员的名称和值,这种方式可以避免成员顺序产生的错误。 下面是一个按成员顺序初始化和按成员名称初始化的示例: 按成员顺序初始化: ``` #include <stdio.h> struct book { char title[20]; char author[20]; int pages; }; int main() { struct book b1 = {"C语言程序设计", "谭浩强", 500}; printf("书名:%s\n", b1.title); printf("作者:%s\n", b1.author); printf("页数:%d\n", b1.pages); return 0; } ``` 按成员名称初始化: ``` #include <stdio.h> struct book { char title[20]; char author[20]; int pages; }; int main() { struct book b1 = {.title = "C语言程序设计", .author = "谭浩强", .pages = 500}; printf("书名:%s\n", b1.title); printf("作者:%s\n", b1.author); printf("页数:%d\n", b1.pages); return 0; } ``` 无论是按成员顺序初始化还是按成员名称初始化,都可以为结构体变量的成员赋初始值,非常方便实用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值