这是我正在使用的结构:
struct nodeList//a node structure
{
int jump;
int config;
int level;
int shifts[200];
int shift_diff[200];
struct nodeList *next;
};
我想创建一个可用于引用此类结构变量的2D指针数组,即该数组的任何元素都可以分配一个指向结构变量的指针。如果可能的话,我更愿意使用malloc动态创建数组。任何指针(双关语意外)将不胜感激。
答案 0 :(得分:2)
首先,请三思而后行。你真的需要一个2D指针数组,每个指针指向一个结构,每个结构包含许多项?这些要求相当复杂:如果你可以简化它们,你的程序会变得更好。
因为根据当前的要求,你会注意到指针和数组的语法会变得相当复杂,而这些要求应该归咎于C语言。
考虑使用结构的2D数组,或者使用某种基于指针的ADT,这对你的特定情况有用(链表,队列,图形,二叉树等等)。
话虽如此,指向struct的二维指针数组:
struct nodelist* array[X][Y];
要动态分配,需要一个指向结构指针的2D数组的指针:
struct nodelist* (*array_ptr)[X][Y];
然后将其分配给指向动态分配的struct的指针数组:
array_ptr = malloc( sizeof(struct nodelist*[X][Y]) );
...
free(array_ptr);
请注意,除非上面没有像上面那样分配2D数组,否则在相邻的存储单元中,它不是数组。
EDIT。顺便说一句,如果你想避免数组指针会产生奇怪的语法,那就有一个技巧。使用上面的代码,您必须将数组作为
来处理(*array_ptr)[i][j];
含义:“在2D数组中,给我项目编号[i] [j]”。
如果您省略了该类型的最内层维度,则可以简化此语法:
struct nodelist* (*array_ptr)[Y]; // pointer to a 1D array
malloc将是相同的,但您现在可以像这样使用它,这可能更直观:
array_ptr[i][j];
含义:“在数组编号i中,给我项目编号j”。你在这里假设相邻内存中有一个数组数组,这是真的。
答案 1 :(得分:0)
var currentTable = $('table');
function bindKeyDown(lastEditable) {
lastEditable.keydown(function(e) {
if(e.keyCode == 9) {
createNewRow($(this));
}
});
}
function getLastEditable() {
return currentTable
.find("tr")
.find('textarea, .cleanbox-editable-cell')
.not(function(index, element) {
return $(element).parent().css("display") == "none";
})
.last();
}
function createNewRow($lastEditable) {
var newEditable = $lastEditable.parent().parent().clone().appendTo(currentTable);
$lastEditable.unbind("keydown");
bindKeyDown(getLastEditable());
}
bindKeyDown(getLastEditable());
这是动态分配的另一种方式,但正如@Lundin所说,如果没有必要改变设计。