(C/C++)动态二维数组的开辟

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()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值