欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-01 20:05:22
...

    在前面的文章《如何理解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;
}

 程序执行结果:

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

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

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

 

使用方法二:

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

程序代码:

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");
	} 

 运行结果:

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

在内存中,指针指向图:

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

小结:

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

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

上一篇:

下一篇: