今天看代码时,遇到了一个令我有点惊讶的一个赋值问题。
虽然是一个很小很小的问题,很多人可能都不会纠结一看就懂,但对于我来说还是攻克了一个难关涨了点姿势呀
下面附上我追根究底的简单代码:
clc;
a=[1 2 3 4 5,6,7,8 9 10 11 12];
%a(1,10:13)=2:5; %没错 难道可以这样赋值??惊讶 此时a_len = 13
%a(10:13)=2:5; %也不错 与a(1,10:13)=2:5; 等价
%a(10:13) %若不赋值,只是通过下标访问数组 则会出现错误:索引超出矩阵维度。
%%%%上边所示都是一维数组
b=[1 2 3;4 5 6;7 8 9];
%b(8:10)=1:3; %出错 :试图沿模糊的维增大数组。
%a(3:5)=b(1,:); %正确 这种赋值 左右两边元素数目必须相同,若a(3:6)=b(1,:);将会出错
%a(3:5)=b(1,2:4); %出错:索引超出矩阵维度。
%b(1,3:4)=10:11; %居然对了,此时b=[1 2 10 11 ;4 5 6 0 ;7 8 9 0]
%b(1,1:4)=11; %也对,此时4个数全被附为11;此时b=[11 11 11 11 ;4 5 6 0 ;7 8 9 0]
%b(1,1:4)=11:12; %这样会错误:带有下标的赋值维度不匹配。
%b(1,1:4) %与一维数组同理,若只是查看不赋值,则会出现错误:索引超出矩阵维度。
a1 = [a 0 1]; %应该是与这种同理:相当于自动增加数组长度
总结:
- 对数组进行赋值时:
- 若等号右边直接是相同数目的数字或只有一个数字,即使等号左边矩阵下标超过矩阵维度也没关系,不会出错,将会自动增加数组长度;
- 若等号右边是其他矩阵,则必须左右两边元素数目必须相同并且矩阵下标不得超过矩阵维度才可以正确。
- 若只是访问矩阵元素,矩阵下标绝对不能超出矩阵维度,否则将会出错。