指针-创建动态多维数组

1、系统内存

1.1 堆和栈的区别

1、栈由系统自动分配,如定义的全局变量等,而堆是人为申请开辟,通过new,malloc进行申请,通过delete,free等进行销毁;
2、栈获得的空间较小,而堆获得的空间较大;
3、栈由系统自动分配,速度较快,而堆一般速度比较慢;
4、栈是连续的空间,而堆是不连续的空间。

2、指针

通过取值符&可以对指针的地址进行操作。

int a=12; int *p=null;`
p=&a;
cout<<*p<<endl;  //此时输出结果为12
cout<<p<<endl;   //此时输出为a的地址,如ox3242

了解了int *后我们可以通国int **加深对指针的理解
在这里插入图片描述

int a=10;
int *p=NULL;
p=&a;
int **mp=NULL;
mp=&p;

3、深入思考

那么p, *p, **p, p + 1, *p + 1, *(p + 1),**p + 1;

    int a=10;
    int *pi=NULL;
    pi=&a;
	int **p=NULL;
	p=&pi;
	
	cout << p << endl;                 //输出为P的地址
	cout << *p << endl;                //输出为int *类型变量的地址
	cout << pi << endl;                 //输出为pi的地址
	cout << **p << endl;                //输出为10
	cout << p + 1 << endl;              //输出为相邻p的下一个内存地址
	cout << *p + 1 << endl;             //输出为pi的下一个内存地址
	cout << *(p + 1) << endl;           //输出为p的下一个内存地址的内容
	cout << **p + 1 << endl;            //输出为11

4、动态创建多维数组m*n

使用malloc进行动态创建,其函数原型为void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。

创建2440*1000数组

	int m = 2440;
	int n = 1000;
	int **p =NULL;
	p = (int **)malloc(m * sizeof(int *));
	for(int i = 0; i <n; i++) 
	{
		*(p + i) = (int *)malloc(n * sizeof(int));
	}

思考:如何创建3* 2440*1000数组

int m = 2440;
	int n = 1000;
	int z = 3;
	int ***p = NULL;
	p = (int ***)malloc(z * sizeof(int **));
	for (int i = 0; i < z; i++)
	{
		*(p + i) = (int **)malloc(m * sizeof(int*));
		for (size_t j = 0; j < m; j++)
		{
		     *(*(p+i)+j)= (int*)malloc(n * sizeof(int));
		} 
	}
	for (size_t i = 0; i < z; i++)
	{
		for (size_t j = 0; j < m; j++)
		{
			for (size_t k = 0; k <n; k++)
			{
				*(*(*(p + i) + j) + k) = k;

			}
		}
	}
	for (size_t i = 0; i < z; i++)
	{
		for (size_t j = 0; j < m; j++)
		{
			for (size_t k = 0; k < n; k++)
			{
				cout<<*(*(*(p + i) + j) + k);
			}
		}
		/*cout << endl;*/
	}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生有梦三千

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值