二级指针与二维数组以及数组指针

这篇博客探讨了C++中动态创建二维数组的两种方式,通过指针p1和p2实现。文中详细展示了如何初始化和打印二维数组,并分析了两者内存分配的区别:p1的行地址不连续,而p2的行地址连续。同时,通过输出指针地址展示了p1++和p2++操作的区别,前者移动4个单位,后者移动3个元素大小的单位。
摘要由CSDN通过智能技术生成
    //创建一个4*3的二维数组
    int **p1 = new int*[4];
    int (*p2)[3] = new int[4][3];
    for(int i = 0; i < 4; ++i)
    {
    	p1[i] = new int[3];
	}

    //初始化
    for(int i = 0; i < 4; ++i)
    {
    	for(int j = 0; j < 3; ++j)
    	{
    		p1[i][j] = i;	//行号 
    		p2[i][j] = i;    		
    	}
	}

    //打印二维数组结果
    for(int i = 0; i < 4; ++i)
    {
    	for(int j = 0; j < 3; ++j)
    	{
    		cout << p1[i][j] << "  ";
		}
		cout << endl;
	}
    for(int i = 0; i < 4; ++i)
    {
    	for(int j = 0; j < 3; ++j)
    	{
    		cout << p2[i][j] << "  ";
		}
		cout << endl;
	}   
 
	printf("p1 = %p, p1++ = %p\r\n", &p1[0], &p1[1]);
	printf("p2 = %p, p2++ = %p\r\n", &p2[0], &p2[1]);    
    

 运行结果1:

    printf("p1 = %p, p1++ = %p\r\n", p1[0], p1[1]);
    printf("p2 = %p, p2++ = %p\r\n", p2[0], p2[1]);    

运行结果2:

    printf("p1 = %p, p1++ = %p\r\n", &p1[0], &p1[1]);
    printf("p2 = %p, p2++ = %p\r\n", &p2[0], &p2[1]);  

1:p1与p2都能用 [][],下标来访问二维数组里面对应的值,但是本质是不一样的。

2:p1++是移动(int*指针)4,p2++是移动 列数*元素类型

p1和p2。都代表二维数组,但是p1的行地址不是连续分配的,但是p2的行地址是连续的分配的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值