1、C实现
int main()
{
int **array; //创建二维数组指针
int row = 4; // 行数
int column = 3; //列数
//初始化
array = (int**)malloc(column*sizeof(int));
for(int i=0;i<row;i++)
{
*(array+i) = (int*)malloc(column*sizeof(int));
}
//
//
//赋值
for (int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
array[i][j] = 0;
}
}
//
//打印
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<array[i][j];
}
cout<<endl;
}
//
return 0;
}
这个的原理也是比较容易理解的。首先二维数组的名称就相当于是一个二维指针,因此这里创建一个int类型的指针。然后是对这个指针进行初始化。次指针可以想象为一个线性的结构,因此初始化就相当于是在一个数组的每一个位置再插入一个数组。就像是一根横向放置的绳子,绳子上面均匀的系上绳结,再在每一个绳结上系上一个下垂的绳子,这个绳子上面也是均匀的系上绳结。这样就构成了一个二维的平面结构,每一个绳结就是储存数据的地方。
这也是为什么第一个内存开辟是column,因为横向的绳结个数就是列数
2. C++实现
int main()
{
int row = 3;
int column = 4;
//初始化
int** arr = new int*[column];
for(int i=0;i<column;i++)
{
arr[i] = new int[row];
}
//赋值
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
arr[i][j] = j;
}
}
//
//打印
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
cout<<arr[i][j];
}
cout<<endl;
}
return 0;
}
3.python实现
class Dynamic_DoubleArray:
def __init__(self,row,column):
self.array = []
#添加行,在以存在的数组的末尾插入一行
def addRow(self, row):
self.array.append(row)
def addElement(self,row_index, element):
if row_index < len(self.array):
self.array[row_index].append(element)
else:
raise IndexError("Row_index out of range")
def getElement(self, row_index, col_index):
if row_index < len(self.array) and col_index < len(self.array[row_index]):
return self.array[row_index][col_index]
else:
raise IndexError("Index out of range")
#打印数组
def showArray(self):
for row in self.array:
print(row)
print("\n",end="")
if __name__ == "__main__":
array = Dynamic_DoubleArray(3,4)
array.showArray()
#添加行
array.addRow([1,2,3])
array.addRow([4,5,6])
array.addRow([7,8,9])
array.showArray()
#添加元素
array.addElement(1,10)
array.addElement(2,11)
array.showArray()