1.二重指针

1.1、二重指针与普通一重指针的区别
(1)本质上来说,二重指针和一重指针的本质都是指针变量,指针变量的本质就是变量。
(2)一重指针变量和二重指针变量本身都占4字节内存空间,
1.2、二重指针的本质
(1)二重指针本质上也是指针变量,和普通指针的差别就是它指向的变量类型必须是个一重指针。二重指针其实也是一种数据类型,编译器在编译时会根据二重指针的数据类型来做静态类型检查,一旦发现运算时数据类型不匹配编译器就会报错。
(2)C语言中如果没有二重指针行不行?其实是可以的。一重指针完全可以做二重指针做的事情,之所以要发明二重指针(函数指针、数组指针),就是为了让编译器了解这个指针被定义时定义它的程序员希望这个指针被用来指向什么东西(定义指针时用数据类型来标记,譬如int *p,就表示p要指向int型数据),编译器知道指针类型之后可以帮我们做静态类型检查。编译器的这种静态类型检查可以辅助程序员发现一些隐含性的编程错误,这是C语言给程序员提供的一种编译时的查错机制。
(3)为什么C语言需要发明二重指针?原因和发明函数指针、数组指针、结构体指针等一样的。
练习题目:二重指针和一重指针的使用

/*char a;char **p1;      // 二重指针char *p2;        // 一重指针printf("sizeof(p1) = %d.\n", sizeof(p1));   //=4printf("sizeof(p2) = %d.\n", sizeof(p2));   //=4p2 = &a;//p1 = &a;     //error 因为两者类型不一样// p1是char **类型,&a是char *类型。// char **类型就是指针指向的变量是char *类型// char *类型表示指针指向的变量是char类型。p1 = &p2;        // p2本身是char *类型,再取地址变成char **类型,和p1兼容。
*/

1.3、二重指针的用法
(1)二重指针指向一重指针的地址
(2)二重指针指向指针数组的

/*   int *p1[5];int *p2;int **p3;//p2 = p1;     //error,类型不一致p3 = p1;       // p1是指针数组名,本质上是数组名,数组名做右值表示数组首元素首地址。数组的元素就是int *类型,所以p1做右值就表示一个int *类型变量的地址,所以p1就是一个int类型变量的指针的指针,所以它就是一个二重指针int **;
*/

(3)实践编程中二重指针用的比较少,大部分时候就是和指针数组纠结起来用的。
(4)实践编程中有时在函数传参时为了通过函数内部改变外部的一个指针变量,会传这个指针变量的地址(也就是二重指针)进去

1.4、二重指针与数组指针
(1)二重指针、数组指针、结构体指针、一重指针、普通变量的本质都是相同的,都是变量。
(2)所有的指针变量本质都是相同的,都是4个字节,都是用来指向别的东西的,不同类型的指针变量只是可以指向的(编译器允许你指向的)变量类型不同。
(3)二重指针就是:指针数组指针

C语言指针(二重指针)相关推荐

  1. c语言中二重指针如何赋值,关于二重指针释放的有关问题

    关于二重指针释放的问题 使用 malloc 来申请内存,申请的代码部分如下: float *fp = (float*)malloc(sizeof(float)* h * w); float **cos ...

  2. C语言 int** 二重指针的理解

    #include <stdio.h> #include <stdlib.h>/*&根据值找地址*根据地址找值 */ f(int** q){//传入的是指针的地址 int ...

  3. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  4. c语言二重指针做参数,C语言二重指针的运用

    『摘要』本文主要通过实例展示C/C++中二重指针的用法和用途,对于诸如二叉树等递归定义的数据结构有一定的指导作用. [关键字]:C/C++.二重指针.递归 本人最近想实现一个B+树,虽然对B+树的理论 ...

  5. 重温C语言三之----指针的认识

    指针类型 指针入门 介绍: 对于指针的介绍,我想用生活中最显而易见的例子去描述.我们在生活中肯定有接收过快递吧,一个快递和除了有别人寄给你的东西外,外面还贴了一张订单,里面有你买的东西别名和寄到你家的 ...

  6. c语言有三级指针,C语言 三级指针的应用

    //三级指针的使用 #define _CRT_SECURE_NO_WARNINGS #include #include #include //三级指针做输出 int getmun(char ***po ...

  7. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  8. c语言中程序偏离,C语言中的指针加减偏移量

    首先看一段程序: #include int main() { int a[5] = {1, 2, 3, 4, 5}; int* p = (int*)(&a + 1); printf(" ...

  9. 各种语言中对指针的叫法

    如果没有指针,就无法构造正统的数据结构, 因此,比较成熟的.正统的编程语言,必定会存在指针3. 3以前, FORTRAN . COBOL 和BASIC 中 都没有指针,但是在 fortran90.Vi ...

最新文章

  1. android中textcolor属性,android – EditText和TextView textColorPrimary不遵循API lt;21的主题颜色...
  2. Web技术电子期刊2008年第3期(总第23期)
  3. centOS安装java
  4. Laravel大型项目系列教程(二)之用户管理
  5. 腾讯机智在GTC 2019
  6. 状态机复合状态 怎么写代码_状态不属于代码
  7. JAVA知识基础(一):数据类型
  8. 2.FactoryMethod-工厂方法模式
  9. WCF框架基础(一)
  10. 服务器4通道性能相当于多少人民币,有钱人的世界我们不懂,组装电脑花费百来万,跑分世界第四...
  11. Linux系统下i350网卡固件更新说明
  12. 网络安全实验室-脚本关1-15
  13. Django 菜鸟教程(跑通流程)
  14. win10红警2黑屏_win10每次重启黑屏假死
  15. git push 报错 remote: error: hook declined to update
  16. java mac excel 中文乱码_解决mac excel中文乱码的问题
  17. 解决Windows10下java环境变量配置不生效的问题
  18. ​【汇总】CV 图像分类常见的 36 个模型
  19. 弘辽科技:淘宝四月份有满减活动吗?淘宝每个月都会有满减活动吗
  20. 程序员面试题精选(24):栈的push、pop序列

热门文章

  1. 广州蓝景分享—遇到网页慢,我们该怎么办?
  2. 【机器学习】鸢尾花分类问题
  3. 无需PS,这些工具也能轻松更换寸照底色
  4. 服务器虚拟内存释放,怎么释放服务器虚拟内存
  5. 一种万能解锁的解决方法
  6. 雷军给陈年总结的小米十条经验
  7. AMS5601开发 AB角度磁编码器
  8. java拷贝远程服务器上文件,java拷贝远程服务器上文件
  9. java项目进度跟踪管理系统
  10. 360篡改Edge、Google浏览器主页的应对方法