变量
定义和初始化
C/C++中要先定义变量,如果未初始化,其值一般是不确定的
Java中变量使用前,须初始化或赋值(实例化时,类中的全局变量会自动被初始化为默认值)
Matlab中变量在写入时不需预先定义,但在读取时应该已被定义
数组长度
C中数组长度固定,可用malloc函数扩展内存空间,并复制已有值到新开辟的连续内存空间
C++/Java中长度可用new获取新的内存空间,并复制已有值到新开辟的连续内存空间
Matlab中变量长度、维度在写入时都可以自动扩展,为了提高性能,最好避免变量纬度自动扩展,而是预先定义空的多维变量,如二维char型数组 a = [‘’;‘’];
注意:Matlab变量长度的自动扩展只在写入变量时发生,读取变量时则不可访问越界
例如:对于定义的变量a=[1 2;3 4],赋值语句a(5,5)=1会自动扩展,而b=a(10,10)则会访问越界出错
数组的比较
C语言:对于字符串,可用strcmp函数,其他类型,要循环逐个比较
Matlab:字符串可用strcmp函数。维度、长度相同的任意类型数组,可直接用==比较,比较结果也是同样大小的数组,为1则对应位置的值相等,为0则不等
自增操作
C/C++/Java可用 x++或++x
Matlab只能 x = x+1;
数组下标
C语言: 下标从0开始,用中括号表示。如a[0],二维数组a[0][1]
Matlab:下标从1开始,用小括号表示,如a(1),二维数组a(1, 2)
字符串的表示
C语言中用双引号"test"
Matlab用单引号 ‘test’
字符串复制常用方法
// C中不能用等号赋值,等号赋值只是指针的复制
C语言:strcpy(a, b);
// C++中可重载操作符“=”实现等号复制字符串
C++/Java:String b = new String(a);
% Matlab中视情况而定,b=a可以复制整个字符串变量。如果b是二维char型数组,则可用 b(2, 1 : length(a)) = a来复制。b的长度不够会自动扩展,a的长度不足则会补空格。
Matlab: b = a; b(2, 1 : length(a)) = a;
运算符
求余
C语言: a % b
Matlab: mod(a, b)
不等于
C语言: !=
Matlab: ~=
循环的写法
// c语言
for(i = 0; i < n; ++i) { // i = 0 ~ n-1
}
% matlab
for i = 1 : n % i = 1 ~ n
end
条件分支结构
// c
if(a==0) {
} else if(a==1) {
} else {
}
% matlab
if a==0
elseif a==1
else
end
函数定义
C语言:函数只能有一个返回值,多个返回值可通过定义结构体、使用指针作为参数传入函数实现
Matlab:函数可有多个返回值,通过[a b] = func()获取
代码优化
Matlab中尽可能多使用矩阵变换运算,而少采用循环的方式