首页 > 编程知识 正文

c语言一级指针和二级指针,二级指针与一级指针的关系

时间:2023-05-04 03:32:44 阅读:227945 作者:3285

    在前面的文章《如何理解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) -> %dt", 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] -> %dt", i, j, ptr[i][j]);}printf("n");}

 运行结果:

在内存中,指针指向图:

小结:

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。