C++ 用new 、delete 动态创建、删除数组

指针名直接作为参数传递给函数时{ int *p;  fun(p) },传递的是指针的值,不是指针的地址,所以被调函数无法修改传入指针的值。

如果要对实参p做赋值操作,有两种方法,

1,传递实参的地址 &p

void fun(int **pp);

int *p;

fun(&p);

2,传递指针的引用, 

void fun(int* &pp);

int *p;

fun(p);


定义一个C语言(创建、打印、删除)二维数组的函数。

/*************************************************************************
    > File Name: new.cpp
    > Author: ims
    > Created Time: 2018/6/10 19:30:19
 ************************************************************************/

#include<cstdio>

void new1(int **&aa, int row, int column,int val=0)  //aa要么用三级指针,要么用指针的引用。否则无法对实参赋值。
{
	aa=new int* [row];
	for(int i =0; i<row; i++)
	{
		aa[i]=new int [column];
	}
	for (int r=0; r<row; r++)
	{
		for (int c=0; c<column; c++)
		{
			aa[r][c]=val;
		}
	}
}
void new2(int ***aa, int row, int column,int val=0)  //三级指针
{  
	*aa=new int* [row];  
	for(int i =0; i<row; i++)  
	{  
		(*aa)[i]=new int [column];  //(*aa)[i]等价于 *(*aa+i)
	}  
	for (int r=0; r<row; r++)  
	{  
		for (int c=0; c<column; c++)  
		{  
			(*aa)[r][c]=val;  //等价于 *( *(*aa + r)+c)
		}  
	}  
} 
void dele(int **&aa,int row)//
{
	for (int i =0; i<row; i++)
	{
		delete []aa[i];
	}
	delete []aa;
	aa=NULL;
}
void print(int **&aa, int R, int C)
{
    for (int r=0; r<R; r++)  
	{  
		for (int c=0; c<C; c++)  
		{  
			printf("%d  ",aa[r][c]);  
		}  
        printf("\n");
	}  
}
int main()
{
	int rows=2;
    int cols=4;
    int **aa;
    new1(aa,rows,cols,1);
    print(aa,rows,cols);
    dele(aa,rows);

    new2(&aa,rows,cols,2);
    print(aa,rows,cols);
    dele(aa,rows);
	return 0;
}




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值