结构体简介(Introduction to Structures)

MATLAB 提供了一个用于结构化数据元素的方式。结构体的创建和访问方式对于熟悉 C 语言编程的人来说是非常熟悉的。

MATLAB 有多种方式定义和访问结构体字段。请参阅《声明结构体》部分获取更多详细信息。

注意:结构体字段名称必须以字母开头,并且区分大小写。字段名称的其余部分可以包含字母、数字和下划线字符。使用 namelengthmax 函数可以确定字段名称的最大长度。


声明结构体(Declaring Structures)

可以使用 struct 命令声明结构体:

>> a = struct('b', 0, 'c', 'test')
a =
    b: 0
    c: 'test'

在 MATLAB 中,变量在使用之前不需要显式声明。因此,结构体可以使用 . 操作符声明字段:

>> a.c = 'test'
a =
    c: 'test'

结构体和字段都可以根据需要声明。


结构体数组(Arrays of Structures)

结构体也可以是数组。以下是一个示例:

>> a = struct('b', 0, 'c', 'test');      % 创建结构体
>> a(2).b = 1;                           % 通过创建另一个元素将其变成数组
>> a(2).c = 'testing'
    a =
      1x2 struct array with fields:
        b
        c
>> a(1)                                  % 初始结构体
    ans =
        b: 0
        c: 'test'
>> a(2)                                  % 第二个元素
    ans =
        b: 1
        c: 'testing'

访问字段(Accessing Fields)

当字段名称已知时,可以直接访问字段值:

>> a.c
    ans =
      test
    ans =
      testing

在某些情况下,你可能需要动态地访问字段,可以通过以下方式实现:

>> str = 'c';
>> a(1).(str)
    ans =
      test
>> a(1).c
    ans =
      test

访问数组元素(Accessing Array Elements)

结构体数组中的任何给定元素都可以通过数组索引访问:

>> a(1).c
    ans =
      test

要访问结构体数组中的所有元素,可以使用 {structure.field} 语法。为了获取向量或数组中的所有值,使用方括号([])如下所示:

>> [a.('c')]
    ans =
      testtesting
>> [a.('b')]
    ans =
      0     1

你也可以将它们放入一个单元格数组中,而不是将它们连接起来:

>> {a.('c')}
    ans = {'test', 'testing'}

给每个结构体数组元素的字段赋值(Assigning Values to a Field of Each Struct Array Element)

MATLAB 提供了工具来为每个数组元素的字段赋值。考虑以下结构体数组:

foo = struct('field_a',{1,2,3,4}, 'field_b',{4,8,12,16})

以下命令将相同的值赋给每个数组元素的 field_b 字段:

value = 1;
[foo.field_b] = deal(value)

要为每个数组元素赋不同的值,可以执行以下操作:

value = {4,8,12,16};
[foo.field_b] = value{:}

通过逻辑索引提取子数组(Sub-arrays through Logical Addressing)

在 MATLAB 中,可以通过使用逻辑索引从数组中提取子数组。考虑以下结构体数组:

foo = struct('field_a',{1,2,3,4}, 'field_b',{4,8,12,16})

要从 foo 中提取所有 foo.field_a 值等于 2 的元素,可以使用逻辑测试:

[foo.field_a] == 2

通过使用这个逻辑数组执行逻辑索引,MATLAB 定义了一个新的结构体数组,其中包含 foofield_a 值等于 2 的元素:

foo([foo.field_a] == 2)

这是 MATLAB 中结构体的创建、访问和操作的基础知识。


Last modified: Tuesday, 15 April 2025, 11:08 AM