第一部分,弦乐。
正如很多人告诉你的,有很多方法可以表示一个字符串。最常见的做法是将字符串存储为数组。但是,您需要一些额外的信息:这个数组的长度。
每种(过程式或命令式)语言都以不同的方式解决这个问题。
有“帕斯卡字符串”,其中数组的前几个字节存储字符串的长度。
有“C 字符串或以 null 结尾的字符串”,其中没有额外的字节来存储长度,但数组中的最后一个字节的值为零。
在 COM 中使用了一种混合方法,即 BSTR。它在开头使用 4 个字节来存储字符串的长度,并在结尾使用一个两字节标记(两个零字节)。它允许将字符串传递给 C 程序,同时快速获取长度。
函数式语言是完全不同的商店。
第二部分,矩阵。
要存储多维(在您的情况下为二维)数组,必须对其“线性化”,即将其转换为一维数组以使用计算机的内存硬件。
所以要存储
float A[W][H];
你至少分配
sizeof(float)*W*H
字节的内存来存储数据。对 A[i][j] 的访问是通过访问地址处的内存字节来完成的
addr(A) + (i * H + j)
或地址
addr(A) + (j * W + i)
这是 C 和 Fortran 采用的两种方法。
但是,如果您需要存储一些稀疏矩阵,可能还有其他一些选项。例如,您可以存储表示矩阵的非零元素的三元组 (i,j,value)。