如何理解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");
	} 

 运行结果:

在内存中,指针指向图:

小结:

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

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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页