Matlab与C/Java等语言的一些语法区别

变量

定义和初始化

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中尽可能多使用矩阵变换运算,而少采用循环的方式