如何理解C指针及二级指针(1):二级指针的使用方式

    在前面的文章《如何理解C指针及二级指针(1)》 介绍了指针的一些重要概念,对于一级指针,相对来讲是比较容易理解的,这里就不再赘述了。我们重点来看一下二级指针的使用方式。

    我们知道,不管是几级 指针,本质上也是个普通变量,只不过指向的内容不同而已。二级指针指向的是“一级指针的地址”。

这里,参考博友二级指针的详解的里的图片,向作者致谢。

使用方法一:

   先为二级指针分配空间,然后赋值,解引用采用*。   

    代码段:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
	int **ptr = NULL;
	int num = 4, size = 4;
	int i,j;
	
	ptr = (int **)malloc(num * sizeof(int *));
	for(i = 0; i < num; i++){
		*(ptr + i) = (int *)malloc(size * sizeof(int));
		for(j = 0; j < size; j++)
			*(*(ptr + i) + j) = (i + 1)*j;
	}
	
	for(i = 0; i < num; i++){
		for(j = 0; j < size; j++){
			printf("(%d, %d) -> %d\t", i, j, *(*(ptr +i) + j));
		}
		printf("\n");
	} 
	
	return 0;
}

 程序执行结果:

进一步,通过指针指向图来说明,如下图所示:

 

使用方法二:

    先为二级指针分配空间,然后赋值,解引用采用数组方式。

程序代码:

ptr = (int **)malloc(num * sizeof(int *));
	for(i = 0; i < num; i++){
		ptr[i] = (int *)malloc(size * sizeof(int));
		
		for(j = 0; j < size; j++)
			ptr[i][j] = (i + 1)*j;
	}
	
	for(i = 0; i < num; i++){
		for(j = 0; j < size; j++){
			printf("[%d, %d] -> %d\t", i, j, ptr[i][j]);
		}
		printf("\n");
	} 

 运行结果:

在内存中,指针指向图:

小结:

    我们在使用二级指针时,牢记,二级指针也只是一个普通变量,只不过这个二级指针变量要指向的是一个 指针的地址,理解的时候,一定要先入为主这个概念,这是最根本的定义。

    我们在对指针进行间接引用时,可以使用“*”操作符,也可以使用数组“[ ]”,这说明“*”和“[ ]”的效果是相同的,根据自己的习惯使用就好,我更喜欢使用“[ ]”。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值