// 多级指针

# include <stdio.h>

int main(void)
{
 int i = 1;
 int * p;
 int ** q;
 p = &i;
 q = &p;
 printf("i = %d, p = %d, q = %d\n", i, p, q);
 printf("*p = %d, &i = %d, &p = %d\n", *p, &i, &p);
 printf("**q = %d, *q = %d, &q = %d\n", **q, *q, &q);
 return 0;
 }
 
 /*
     程序输出结果:
         i = 1,    p = 6487628,  q = 6487616
   *p = 1,   &i = 6487628, &p = 6487616
   **q = 1,  *q = 6487628, &q = 6487608
   
   --------------------------------
   Process exited after 0.01289 seconds with return value 0
   请按任意键继续. . .
     结论:
         多级指针就是储存了一个指针变量地址的指针变量。
 */

// 多级指针与静态变量的缺陷

# include <stdio.h>

void f(int ** q)
{
 int i = 5;
 **q = i;
 
 return;
}

int main(void)
{
 int * p;
 f(&p);
 printf("%d", *p);  // 此处逻辑错误
 
 
 return 0;
 }
 
 /*
     本程序编译正确,但却无法执行,原因是语法上没有错误,但逻辑上有错。
  错误语句为   printf("%d", *p); 此处的 *p 有问题,原因是 *p 相当
  于 i 变量,但程序在执行完被调函数 f 后,就将 i 的内存释放了,接下
  来 i 就不属于此程序的内存,而 *p 访问的是已被释放的内存 i ,这样
  就出现了错误。
 */

类比于上一个程序。

// 多级指针与动态变量

# include <stdio.h>
# include <malloc.h>

void f(int ** q)
{
    *q = (int*)malloc(sizeof(int));
    **q = 5;
 
 return;
}

int main(void)
{
 int * p;
 f(&p);
 printf("%d", *p);
 free(p);  // 释放 p 所指向的内存。
 
 return 0;
 }
 
 /*
     程序输出结果:
     5
  --------------------------------
  Process exited after 0.02017 seconds with return value 0
  请按任意键继续. . .
 由于使用了 malloc 函数,构造了一个动态变量,而动态变量需要手动释放
 可以跨函数使用。
 */

转载于:https://www.cnblogs.com/lnlin/p/6537852.html

说明多级指针与动态变量,静态变量关系的几个简单程序相关推荐

  1. 函数作用域的静态变量

    2019独角兽企业重金招聘Python工程师标准>>> 下面这段话来自百度百科: 静态局部变量属于静态存储方式,它具有以下特点:     (1) 静态局部变量在函数内定义,但不像自动 ...

  2. 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)

    第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...

  3. 1.16 static关键字(静态变量和静态方法)

    在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有. 静态成员不依赖于类的特定实例,被 ...

  4. Java 静态变量和静态方法

    在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有. 静态成员不依赖于类的特定实例,被 ...

  5. Java中的静态变量和静态方法

    决定哪些方法或变量声明为静态的,是类设计时的关键步骤. 静态变量(static variable)有时也称为类变量(class variable),它由类的所有实例共享.对于类的所有对象来说,静态变量 ...

  6. 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

     常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...

  7. 全局变量和静态变量以及内存堆栈的关系

    在编写程序时,内存的控制是很重要的一部分.关于全局变量和局部变量,静态变量的关系如何?以及他们在内存在是存储于哪部分的?做个记录,以便往后查看. 1. 全局变量和静态变量 全局变量:又称外部变量,与之 ...

  8. python静态变量和动态变量_动态变量和静态变量的区别,堆和栈的区别

    动态变量和静态变量的区别: 1.存储位置 动态变量:存储在内存出栈数据区 静态变量:存储在全局数据区(静态数据区) 2.生命期 动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数 ...

  9. 动态变量和静态变量的区别,堆和栈的区别

    动态变量和静态变量的区别: 1.存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区) 2.生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变 ...

最新文章

  1. 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
  2. 【加法笔记系列】逻辑电路的实现
  3. leetcode 834. Sum of Distances in Tree | 834. 树中距离之和(树形DP)
  4. .NET Core加解密实战系列之——RSA非对称加密算法
  5. 前端学习(1535):单一页面的优势
  6. 安卓手机 Python 自动化测试
  7. 在C#中用RX库和await来实现直观的状态机
  8. 夜间排障某省某电信公司后台数据库故障
  9. 使用shell实现zookeeper集群的自动搭建
  10. python装饰器详解-Python装饰器基础概念与用法详解
  11. 51nod1712 区间求和
  12. SM3密码杂凑算法和SM2数字签名算法的PDF签名方法
  13. 计算机桌面桌面设置动态视频教程,电脑怎么设置动态桌面?电脑设置动态视频桌面教程...
  14. 新冠疫情加速医疗废物处置行业发展,我国医废处置能力达6245吨/天
  15. golang 求差集和并集算法
  16. Linu修改系统时间
  17. 安卓adb是什么?ADB命令大全及使用教程
  18. 微信支付可以设置0元么?
  19. linux桌面 仿android,Ubuntu粉丝必备!仿Ubuntu锁屏App体验
  20. python简单爬取斗图图片(自学第十天)

热门文章

  1. 收藏 | 一文看懂注意力机制
  2. 当模型预测控制遇见机器学习
  3. 全球首款光线追踪GPU
  4. 深度学习(六十)网络压缩简单总结
  5. 复述-软考网规--云计算专题
  6. 网线重新插拔后恢复正常_14日科技精选:路由器经常掉线,必须重新插拔网线才能上网。什么原因?...
  7. ubuntu linux kvm安装,ubuntu16.04 下kvm安装
  8. php 数组改成索引数组_PHP 自定义集合与数组规范
  9. c语言判断回文字符串递归,用递归实现判断一个字符串是否为回文串
  10. android ripple 大小,Android L限制Ripple水波纹范围大小