前言

在之前学习完一级指针后,知道每一个变量都有对应的地址,那一级指针是不是也有地址,一级指针的地址如何存放?
这几个问题就是想要这一章的内容来解决。

一、什么是二级指针

在之前学数组的时候我们知道,二维数组就是在一个数组中再嵌套一个有长度的数组。
以二维数组来帮助理解一下二级指针,一级指针是用来存放和指针类型相同的变量的地址,而需要存放指针变量的指针就是二级指针。

二、二级指针的使用

1.二级指针的定义

type** variate;
  • type:变量类型
  • variate:变量名

2.二级指针的赋值

int a = 3;
int* pa = &a;
int** ppa = &pa;

int** 其实可以理解为 int* *int* 是指针类型,再加了一个 * 就是对一级指针 pa 的一个解引用。

3.二级指针的使用

3.1 用二级指针输出一级指针的地址

#include <stdio.h>
int main(){
int a = 3;
int* pa = &a;
int** ppa = &pa;
printf("%d\n", *ppa);
return 0;
}

3.2 用二级指针输出一级指针中的内容

#include <stdio.h>
int main(){
int a = 3;
int* pa = &a;
int** ppa = &pa;
printf("%d\n", **ppa);
return 0;
}

3.3 用二级数组修改一级数组中的值

#include <stdio.h>
int main(){
int a = 3;
int* pa = &a;
int** ppa = &pa;
**ppa = 5;
printf("%d\n", *pa);
return 0;
}

三、多级指针

如果要存放二级指针的地址改用什么来存放呢?
可以根据之前二级指针的使用的方法,存放二级指针的地址可以使用三级指针,三级指针的地址用四级指针,以此类推。
在C语言中,指针的级数超过了二级后都统称为多级指针。

比如说创建一个三级指针

int main(){
int a;
int* pa = &a;
int** ppa= &pa;
int*** pppa = &ppa;
return 1;
}

剩下的多级指针就以此类推即可

总结

  • 二级指针可以用于存放一级指针的变量。
  • 二级指针在后面的一个知识点中使用的比较多。
  • 一定要区分 * 作用的地方。

C语言指针--二级指针的更多相关文章

  1. 由链表初始化看C语言的二级指针

    先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...

  2. C语言复习: 二级指针和多级指针

    二级指针内存模型建立 void main2() {     int i = 0;       //指针数组     char * p1[] = { "123", "456 ...

  3. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  4. [编程] C语言的二级指针

    用C语言指针作为函数返回值:C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数函数运行结束后会销毁在它内部定义的所有局部数据 #include<stdio.h> #in ...

  5. C语言实现二级指针表示字符串数组

    头文件: #include<stdlib.h> #include<stdio.h> #include<string.h> 函数原型: char ** createB ...

  6. 真正明白C语言二级指针(转载)

    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

  7. 真正明白c语言二级指针

    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的 ...

  8. C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数

    1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...

  9. C语言一级指针与二级指针

    指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在 ...

  10. C 真正理解二级指针

    本文转载自CSDN博主liaoxinmeng,做数据结构时遇到指针方面的问题,想了许久,因此我觉得很有必要复习一下二级指针及其使用 正文如下: 指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也 ...

随机推荐

  1. SpringBoot 集成 Quartz + MySQL

    Quartz 简单使用 Java SpringBoot 中,动态执行 bean 对象中的方法 源代码地址 => https://gitee.com/VipSoft/VipBoot/tree/de ...

  2. 关于Validation的方法使用

    acceptance验证 acceptance 是 Rails 中的一个验证器(validator),用于验证一个布尔类型的属性是否被接受.在表单中,通常会有一些复选框或单选按钮,用户需要勾选或选择才 ...

  3. 虚拟dom中key的作用以及用index作为key引发的问题

  4. JavaFx 实现水平滚动文本(跑马灯效果)

    原文地址: JavaFx 实现水平滚动文本(跑马灯效果) - Stars-One的杂货小窝 本文是以TornadoFx框架进行编写,各位使用JavaFx可以参考 代码已经封装在common-contr ...

  5. CS144 计算机网络 Lab3:TCP Sender

    前言 在 Lab2 中我们实现了 TCP Receiver,负责在收到报文段之后将数据写入重组器中,并回复给发送方确认应答号.在 Lab3 中,我们将实现 TCP 连接的另一个端点--发送方,负责读取 ...

  6. pytest常用断言

    如上官网所说,pytest使用python中的assert来比较实际值与预期值,实现断言功能 1 常用的断言方式 assert xxx assert a == b assert a!=b assert ...

  7. 2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?

    福哥答案2020-10-19: 后面定义的函数可能会依赖前面的资源,所以要先执行.如果前面先执行,释放掉这个依赖,那后面的函数就不能找到它的依赖了.***[评论](https://user.qzone ...

  8. 2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?

    2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据.数据库不能停,并且还有增删改操作.请问如何操作?福哥答案2020-01-20: 陌陌答案:用pt_onl ...

  9. vue全家桶进阶之路4:NPM包

    NPM(Node Package Manager)是 Node.js 的包管理工具,用来安装各种 Node.js 的扩展. NPM是 JavaScript 的包管理工具,也是世界上最大的软件注册表.有 ...

  10. docker升级gitlab

    昨天在家部署了gitlab,版本居然是15.10,公司版本却是14.6,升级一波. 官方文档: https://docs.gitlab.com/ee/update/#upgrading-without ...