前⾔95年高考语文第一题
对于有C语⾔基础的使⽤者,结构体这个词你可能很熟悉。没错,MATALB编程中也有结构体。⽽且与C语⾔的结构体相⽐,它拥有更独特的特性。
与元胞(cell)类型⼀样,结构体也可以存储任意类型的数据。当然,它们也存在许多不同点。最⼤的不同点是,结构体是以不同名字的字段作为存储容器,每个字段都可以存储任意类型的数据。此外,若要构建结构体数组,则要求每个结构体的字段数⽬和字段名字必须相 同。下⾯将讲述结构体数组,单个结构体也视为1x1的结构体数组。
正⽂
1. 结构体数组的创建
直接对结构体变量名.字段名赋值(字段的命名规则和变量⼀样)
% 1x3的结构体数组(不明确指定位置,按⽔平⽅式排列)
s(1).name = 'LiSi';
s(1).gender = 'Male';
s(1).age = 18;
s(1).test = {'hello', 1};
s(2).name = 'LiSi';
s(2).gender = 'female';
s(2).age = 20;
s(2).test = s(1);
s
s1 = s(1)
s2 = s(2)
全文搜索引擎
代码运⾏结果如下。可以看出字段可以存储任意类型的数据,甚⾄是元胞数组和结构体。
使⽤函数struct()创建
% 1x1的结构体数组
s1 = struct; % 不含字段
s2 = struct('name', '李四', 'gender', 'male');
% 1x3的结构体数组
s3 = struct('name', {'张三', '李四'}, 'gender', 'male'); % 通过元胞数组,来创建多结构体的结构体数组
s3
s3_1 = s3(1)
s3_2 = s3(2)
代码运⾏结果如下。注:struct函数的字段参数不能重复。因此,若要创建多结构体的结构体数组,必须使⽤元胞数组。
2. 结构体数组的访问
结构体数组的访问很简单。这⾥不展⽰代码,以⽂字叙述。
访问结构体数组中某个结构体的某个字段
先对结构体数组进⾏索引,得到待访问的结构体。再通过待访问的结构体.字段名获取该结构体的该字段的数据。此外,如果该字段的数据是⼀个数组,还可以对该数组进⼀步索引。
访问结构体数组中所有结构体的某个字段
直接通过结构体数组.字段名,结果相当于⼀个逗号间隔的式⼦:结构体1.字段名, 结构体2.字段名, 结构体3.字段名 ...
3. 结构体数组的拼接欧洲理事会
结构体数组的拼接也很简单,和其它类型的拼接是⼀样的,这⾥不展⽰代码,只叙述它要遵循的纬度规则。
⽔平拼接
待拼接的结构体数组的⾏数相等。
垂直拼接
待拼接的结构体数组的列数相等。
MATALB⽀持动态添加结构体字段,这⼀特点在交互设计中常被使⽤。
% 动态添加结构体字段的⼀般语法:结构体名.(动态表达式) = 待赋值
% 这⾥要求“动态表达式”的返回值是字符数组或字符串
此外,MATALB版本的不同,对动态表达式的要求也略有不同。详见。
5. 结构体数组的操作函数
有很多函数可以作⽤于结构体数组,下⾯举⼏个常⽤函数的简单⽤法。更多函数见。
isfield(),判断输⼊的字段是否为输⼊结构体数组的字段。
rmfield(),删除结构体中的字段。
% 1x3的结构体数组
枸骨叶冬青
s = struct('name', {'张三', '李四', '王⼆⿇⼦'}, 'gender', 'male', 'age', {18, 20, 'unknown'});
庵埠中学
% 函数isfield()
fieldStatus = isfield(s, {'name', 'gender'})
% 函数rmfield()
网络视频服务器软件s_new = rmfield(s, {'name', 'gender'})
s
代码运⾏结果如下。