與建立數值型陣列一樣,建立新struct物件不需要事先申明,可以直接引用,而且可以動態擴充。比如建立乙個複數變數x:
x.real = 0; % 建立欄位名為real,並為該字段賦值為0
x.imag = 0 % 為x建立乙個新的字段imag,並為該字段賦值為0
x =real: 0
imag: 0
然後可以將其動態擴充為陣列:
x(2).real = 0; % 將x擴充為1×2的結構陣列
x(2).imag = 0;
在任何需要的時候,也可以為陣列動態擴充字段,如增加欄位scale:
x(1).scale = 0;
這樣,所有x都增加了乙個scale欄位,而x(1)之外的其他變數的scale欄位為空:
x(1) % 檢視結構陣列的第乙個元素的各個欄位的內容
ans =
real: 0
imag: 0
scale: 0
x(2) % 檢視結構陣列的第二個元素的各個欄位的內容,注意沒有賦值的字段為空
ans =
real: 0
imag: 0
scale:
應該注意的是,x的real、imag、scale欄位不一定是單個資料元素,它們可以是任意資料型別,可以是向量、陣列、矩陣甚至是其他結構變數或元胞陣列,而且不同字段之間其資料型別不需要相同。例如:
clear x;
x.real = [1 2 3 4 5];
x.imag = ones(10,10);
陣列中不同元素的同一欄位的資料型別也不要求一樣:
x(2).real = '123';
x(2).imag = rand(5,1);
甚至還可以通過引用陣列欄位來定義結構資料型別的某欄位:
x(3).real = x(1);
x(3).imag = 3;
x(3)
ans =
real: [1x1 struct]
imag: 3
使用struct函式也可以建立結構,該函式產生或把其他形式的資料轉換為結構陣列。
struct的使用格式為:
s = struct('field1',values1,'field2',values2,…);
該函式將生成乙個具有指定欄位名和相應資料的結構陣列,其包含的資料values1、valuese2等必須為具有相同維數的資料,資料的存放位置域其他結構位置一一對應的。對於struct的賦值用到了元胞陣列。陣列values1、values2等可以是元胞陣列、標量元胞單元或者單個數值。每個values的資料被賦值給相應的field欄位。
當valuesx為元胞陣列的時候,生成的結構陣列的維數與元胞陣列的維數相同。而在資料中不包含元胞的時候,得到的結構陣列的維數是1×1的。例如:
s = struct('type',,'color',,'x',)
s =
1x2 struct array with fields:
type
color
x
得到維數為1×2的結構陣列s,包含了type、color和x共3個字段。這是因為在struct函式中、和都是1×2的元胞陣列,可以看到兩個資料成分分別為:
s(1,1)
ans =
type: 'big'
color: 'blue'
x: 3
s(1,2)
ans =
type: 'little'
color: 'red'
x: 4
相應的,如果將struct函式寫成下面的形式:
s = struct('type',,'color',,'x',)
s =
2x1 struct array with fields:
type
color
x
則會得到乙個2×1的結構陣列。
結構體的賦值,這裡不建議用下面這種形式進行統一賦值,
s = sturct('field1',values1,'field2',values2,…)
而是建議直接賦值,就是對每乙個屬性進行單獨賦值,因為每乙個屬性的長度不同,所以,直接賦值,就省去了宣告的過程,方便,快捷;
例如我們要宣告下面的結構體:
example.adress='北京';
example.age='18歲'
直接輸入以上語句便可。
>> example
example =
adress: '北京'
age: '18歲'
結構體值的顯示:
如果我們要檢視結構體的所有值,那麼可以直接輸入結構體的名字,然後回車,就可以列出結構體的每項的名稱和值,如果要顯示某乙個屬性,通過單獨呼叫,例如example.name,便會顯示其名稱。
>> example.name
ans =
結構體的屬性增加刪除:
如果我們要刪除結構體的某一項屬性,那麼可以通過函式rmfield,來實現,如果要增加乙個屬性,那麼可以直接進行賦值便可。
>> example=rmfield(example,'age')結構體欄位名稱的獲取以及判斷:example =
adress: '北京'
>> example.salary='15000'
example =
adress: '北京'
salary: '15000'
假如我們想要知道這個結構體具體有多少字段(屬性),我們可以通過函式fieldnames來獲取欄位名稱,同時我們也可以通過函式isfield來判斷是否存在某一字段。
>> fieldnames(example)
ans =
'name'
'adress'
'salary'
>> isfield(example,'salary')
ans =
1>> isfield(example,'home')
ans =
0
matlab struct相關操作
生成有6個字段的結構體,各欄位內容為空 control struct filename en c out c in a f 為字段填充內容,填充的可以為常數或矩陣 control.filename name.filename 1 end 4 control.en en control.c out c...
結構體型別 結構體變數 結構體陣列 結構體指標
問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...
結構體 結構體陣列
void test 函式遞迴呼叫 允許函式體裡再次呼叫函式本身 使用遞迴一定要有出口 long fact int n return n fact n 1 定義乙個新的資料型別 struct mypoint 結構體型別所占用的記憶體空間是最大資料型別的整數倍。因為結構體型別的變數在分配記憶體時有記憶體...