1
A
回答
1
一种方法是使用GetMem来分配足够的内存。 GetMem似乎得到广泛支持。
const
MAXMATRIXDATA: Word = 10000;
type
TMatrixDataType = Word;
TMatrixData = array[0..MAXMATRIXDATA] of TMatrixDataType;
PMatrixData = ^TMatrixData;
TMatrix = record
Rows, Cols: Word;
MatrixData: PMatrixData;
end;
PMatrix = ^TMatrix;
function CreateMatrix(Rows, Cols: Word): PMatrix;
var
Ret: PMatrix;
begin
New(Ret);
Ret^.Rows := Rows;
Ret^.Cols := Cols;
GetMem(Ret^.MatrixData,Rows*Cols*SizeOf(TMatrixDataType));
CreateMatrix := Ret;
end;
function GetMatrixData(Matrix: PMatrix; Row, Col: Word): TMatrixDataType;
begin
GetMatrixData := Matrix^.MatrixData^[(Row*Matrix^.Cols)+Col];
end;
procedure SetMatrixData(Matrix: PMatrix; Row, Col: Word; Val: TMatrixDataType);
begin
Matrix^.MatrixData^[(Row*Matrix^.Cols)+Col] := Val;
end;
1
任何现代的pascal变体(Delphi)都可以让你创建动态的(运行时大小的)数组。
如果语言不支持,你可以照顾自己解决多维动态数组:
var
rows, cols, total, i, j : integer;
cell : datatype;
begin
rows := ...;
cols := ...;
total := rows * cols;
matrix := ...(total);
cell := matrix[i * cols + j]; // matrix[row=i,col=j]
end;
这种处理会比下面的链表快了很多。
相关问题
- 1. 如何在Python中实现链操作?
- 2. 如何在C#中实现malloc操作#
- 3. Pascal的三角Java实现
- 4. 记录操作,如何实现更好
- 5. NHibernate如何实现批处理操作?
- 6. 如何实现的CRUD操作
- 7. 如何实现拖放操作
- 8. 如何实现JSP浏览器操作
- 9. 如何实现原子操作?
- 10. 如何实现连接操作
- 11. 如何实现字符串操作?
- 12. 如何使用Codeigniter实现CRUD操作?
- 13. Perl Catalyst操作如何实现?
- 14. 如何在asp.net中的GridView中实现CheckBox相关的操作?
- 15. 在NSTableView中实现拖放操作
- 16. 在php中实现集合论操作
- 17. 在Swift中实现响应者操作
- 18. 在Tensorflow中实现Theano操作
- 19. 如何在MS Access中实现SQL INTERSECT和MINUS操作
- 20. 如何在新的操作系统中实现计时?
- 21. 如何实现像“喜欢”在java中操作一个SQL?
- 22. 你如何在C#和MVVM中实现异步操作?
- 23. 如何在qt中实现帮助操作
- 24. 如何实现在Ace编辑器中的拖放操作?
- 25. 如何在Lambda架构中实现合并操作?
- 26. 如何在我的操作栏中实现搜索?
- 27. 如何在Scala中实现具有默认操作的地图
- 28. 如何在Qt中实现键值文件操作
- 29. 如何在MahApps Metro Layout中实现拖放操作
- 30. 如何在Flex Grid控件中实现拖放操作?
MAXMATRIXDATA:Word = 10000;在FreePascal => MAXMATRIXDATA = 10000时不起作用 – 2009-05-01 12:54:19